前言
通过前面一篇文章(?零基础学Nginx【1】 | Nginx基础概念入门)的学习,我们已经知道了Nginx是一款高性能的代理服务器软件,支持正向代理和反向代理。同时,Nginx还能实现服务器的集群和负载均衡,支持插件式开发。除此之外,Nginx还有很多十分强大的功能,如对客户端限流,缓存,动态黑白名单和实现灰度发布等。本篇我们就来介绍Nginx的安装和配置。
Nginx的安装
安装和配置Nginx之前,我们需要先安装一些Nginx相关的依赖。
- gcc
- pcre
- openssl
- zlib
gcc
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:
代码语言:javascript复制yum install gcc-c
PCRE
PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库。pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:
代码语言:javascript复制yum install -y pcre pcre-devel
OPENSSL
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
Nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。
代码语言:javascript复制yum install -y openssl openssl-devel
zlib
当Nginx需要支持压缩功能时,如需要对上传的图片和传输的数据进行压缩处理,就需要使用到zlib。zlib 库提供了很多种压缩和解压缩的方式, 所以需要在 Centos 上安装 zlib 库。
代码语言:javascript复制yum install -y zlib zlib-devel
安装Nginx
下载nginx,两种方式
- 直接下载
.tar.gz
安装包,地址:
https://nginx.org/en/download.html
- 使用
wget
命令下载(推荐)。确保系统已经安装了wget,如果没有安装,执行yum install wget
安装。
wget -c https://nginx.org/download/nginx-1.12.2.tar.gz
依然是直接命令:
代码语言:javascript复制# 解压
tar -zxvf nginx-1.12.2.tar.gz
# 进入解压目录
cd nginx-1.12.2
开始配置:
其实在 nginx-1.12.0 版本中你就不需要去配置相关东西,默认就可以了。当然,如果你要自己配置目录也是可以的。
使用默认配置
代码语言:javascript复制./configure
编译安装
代码语言:javascript复制make && make install
编译完成之后, 我们启动Nginx
代码语言:javascript复制cd /usr/local/nginx/sbin
./nginx
可以查看Nginx的进程
代码语言:javascript复制[root@localhost conf]# ps aux|grep nginx
root 108255 0.0 0.0 20540 600 ? Ss 15:09 0:00 nginx: master process ./nginx
nobody 108256 0.0 0.1 23068 1608 ? S 15:09 0:00 nginx: worker process
root 108636 0.0 0.0 112824 980 pts/1 R 16:06 0:00 grep --color=auto nginx
在浏览器中输入IP,例如192.168.100.128
可以看到这样的页面,说明我们的Nginx就启动成功了。
Nginx的默认安装路径为:/usr/local/nginx/ ,如果想要更改路径,需要采用软链接的方式进行设置。
我们打开 Nginx 的配置文件
代码语言:javascript复制vi /usr/local/nginx/conf/nginx.conf
可以发现默认 listen 的值是 80
说明我们现在默认的访问端口是: 80
,我们再通过ip 端口
访问也是一样的。
但我们现在用的是Linux系统,默认情况下有防火墙。我们Nginx的访问端口是 80
,默认是访问不了的,也就是我们会看不到界面。因此我们需要在防火墙中设置开放的端口。
# 查看开放的端口
firewall-cmd --list-all
代码语言:javascript复制# 设置开放的端口
[root@localhost conf]# firewall-cmd --add-service=http --permanent
success
[root@localhost conf]# firewall-cmd --add-port=80/tcp --permanent
success
# 重启防火墙
[root@localhost conf]# firewall-cmd --reload
success
我们再次查看开放的端口,就可以发现 80 端口已经被添加进来了。
Nginx中常用命令
使用 Nginx 操作命令前提条件:必须进入 nginx 的 目录 /usr/local/nginx/sbin
代码语言:javascript复制cd /usr/local/nginx/sbin/
查看版本号
代码语言:javascript复制[root@localhost sbin]# ./nginx -v
nginx version: nginx/1.12.2
查找安装路径:
代码语言:javascript复制[root@localhost sbin]# whereis nginx
nginx: /usr/local/nginx
启动,停止,重加载
代码语言:javascript复制 cd /usr/local/nginx/sbin/
./nginx
./nginx -s stop # 启动
./nginx -s quit # 退出
./nginx -s reload # 重新加载(配置文件重新加载,我们就无需重启生效)
Nginx的配置
Nginx 安装目录下,其默认的配置文件都放在这个目录的 conf 目录下,而主配置文件 nginx.conf
也在其中,后续对 nginx 的使用基本上都是对此配置文件进行相应的修改。
打开配置文件,我们可以很明显的将 nginx.conf
配置文件分为三部分:
第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
比如上面第一行配置的:
代码语言:javascript复制worker_processes 1;
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约
第二部分:events块
比如上面的配置:
代码语言:javascript复制events {
worker_connections 1024;
}
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024 。 这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
第三部分:http 块
代码语言:javascript复制http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。我们后面要介绍的反向代理,负载均衡,动静分离都是在这里配置的。
需要注意的是:http 块也可以包括 http 全局块、server 块。
- http 全局块
http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
代码语言:javascript复制include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
- server 块
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。我们后边讲解Nginx实例,也主要是在这部分进行修改。
巨人的肩膀
https://www.bilibili.com/video/BV1zJ411w7SV?p=7
彩蛋
有幸收集过一份关于Nginx的面试专题,需要的朋友可以关注【猿人菌】后台回复“Nginx”进行获取。
小结
本篇文章到这里就结束了,不知道小伙伴们都掌握得怎么样呢!下一期,我们要学习Nginx的安装和Nginx常用命令的使用,敬请期待!你知道的越多,你不知道的也越多,我是Alice,我们下一期见!
一键三连,养成习惯~
文章持续更新,可以微信搜一搜「 猿人菌 」第一时间阅读,思维导图,大数据书籍,大数据高频面试题,海量一线大厂面经…期待您的关注!