nginx安装及配置文件相关命令详解(一)
nginx安装
1、准备安装环境
操作系统:centos7.9
安装需要的软件包:
gcc pcre zlib openssl
yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
注:Nginx是使用C语言编写的程序,因此想要运行Nginx就需要安装一个编译工具。GCC就是一个开源的编译器集合,用于处理各种各样的语言,其中就包含了C语言
Nginx在编译过程中需要使用到PCRE库(perl Compatible RegularExpressoin 兼容正则表达式库),因为在Nginx的Rewrite模块和http核心模块都会使用到PCRE正则表达式语法
zlib库提供了开发人员的压缩算法,在Nginx的各个模块中需要使用gzip压缩,所以我们也需要提前安装其库及源代码zlib和zlib-devel
OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包进行安全通信,并且避免被窃听。
SSL:Secure Sockets Layer安全套接协议的缩写,可以在Internet上提供秘密性传输,其目标是保证两个应用间通信的保密性和可靠性。在Nginx中,如果服务器需要提供安全网页时就需要用到OpenSSL库,所以我们需要对OpenSSL的库文件及它的开发安装包进行一个安装
1、nginx源码安装
(1)进入官网查找需要下载版本的链接地址,然后使用wget命令进行下载
[root@localhost ~]# wget http://nginx.org/download/nginx-1.16.1.tar.gz
(2)进行解压
[root@localhost ~]# tar -xzf nginx-1.16.1.tar.gz
(3)进入解压的文件中进行编译安装
./configure 参数说明:
PATH:是和路径相关的配置信息
with:是启动模块,默认是关闭的
without:是关闭模块,默认是开启的
--prefix=PATH : 指向nginx的安装目录,默认值为/usr/local/nginx
--sbin-path=PATH:指向(执行)程序文件(nginx)的路径,默认值为<prefix>/sbin/nginx
--modeules-path=PATH:指向Nginx动态模块安装目录,默认值为<prefix>/modules
[root@localhost ~]# cd nginx-1.16.1/ [root@localhost nginx-1.16.1]# ./configure --prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--modules-path=/usr/local/nginx/modules \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--lock-path=/usr/local/nginx/logs/nginx.lock
[root@localhost nginx-1.16.1]# make && make install
2、yum安装
注:yum 安装会安装nginx的最新版本
1、安装utils
[root@localhost nginx-1.16.1]# yum install -y yum-utils
2、添加yum源配置文件
cat /etc/yum.repos.d/nginx.repo [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
3、查看nginx位置
[root@localhost yum.repos.d]# whereis nginx nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz
4、查看nginx目录
[root@localhost ~]# tree /usr/local/nginx/
/usr/local/nginx/
├── conf // nginx所有配置文件目录
│ ├── fastcgi.conf //fastcgi相关配置文件
│ ├── fastcgi.conf.default //fastcgi.conf的参数备份文件
│ ├── fastcgi_params //fastcgi的参数文件
│ ├── fastcgi_params.default //fastcgi的参数备份文件
│ ├── koi-utf //这三个文件都是与编码转换映射相关的配置文件,用来将一种编码转换成另一种编码
│ ├── koi-win //这三个文件都是与编码转换映射相关的配置文件,用来将一种编码转换成另一种编码
│ ├── mime.types //记录的是HTTP协议中的Content-Type的值和文件后缀名的对应关系
│ ├── mime.types.default //mime.types的备份文件
│ ├── nginx.conf //Nginx的核心配置文件,非常重要,也是重点
│ ├── nginx.conf.default //nginx.conf的备份文件
│ ├── scgi_params //scgi的参数文件
│ ├── scgi_params.default //scgi的参数备份文件
│ ├── uwsgi_params //uwsgi的参数文件
│ ├── uwsgi_params.default //uwsgi的参数备份文件
│ └── win-utf //这三个文件都是与编码转换映射相关的配置文件,用来将一种编码转换成另一种编码
├── html //存放nginx自带的两个静态的html页面
│ ├── 50x.html //访问失败后的失败页面
│ └── index.html //成功访问的默认首页
├── logs //记录日志的文件,当nginx服务器启动后,这里面会有 access.log,error.log 和nginx.pid三个文件出现
└── sbin //存放执行程序文件nginx
└── nginx //控制Nginx的启动和停止等相关的命令控制Nginx的启动和停止等相关的命令
CGI(Common Gateway Interface)通用网关【接口】,主要解决的问题是从客户端发送一个请求和数据,服务端获取到请求和数据后可以调用调用CGI【程序】处理及相应结果给客户端的一种标准规范。
4 directories, 18 files
信号 | 作用 |
TERM/INT | 立即关闭整个服务 |
QUIT | "优雅"的关闭整个服务 |
HUP | 重读配置文件并使用服务对新配置项生效 |
USR1 | 重新打开日志文件,可以用来进行日志切割 |
USR2 | 平滑升级到最新版得nginx |
WINCH | 所有子进程不在接收处理新连接,相当于给work进程发送quit指令 |
singal:即为信号;PID即为获取到得master线程ID
(1)发送TERM/INT信号给master进程,会将nginx服务立即关
[root@localhost ~]# kill -TERM $(cat /usr/local/nginx/logs/nginx.pid
[root@localhost ~]# kill -INT $(cat /usr/local/nginx/logs/nginx.pid)
(2)发送QUIT信号给master进程,masterv进程会控制所有的work进程不再接收新的请求,等所有请求处理完后,在把进程都关闭掉。
[root@localhost ~]# kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid)
(3)发送HUP信号给master进程,master进程会把控制旧的work进程不再接收新的请求,等处理完请求后再接收新的请求,等处理完旧的work进程关闭掉,然后根据nginx的配置文件重新启动新的work进程
[root@localhost ~]# kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
(4)发送USR1信号给master进程,告诉nginx重新开启日志文件
[root@localhost ~]# kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
(5)发送USR2信号给master进程,告诉master进程要平滑升级这个时候,会重新开启对应的master进程和work进程,整个系统中将会有两个master进程,并且新的maser进程的PID会被记录在/usr/local/nginx/logs/nginx.pid而之前旧的master进程PID会被记录在/usr/local/nginx/logs/nginx.pid.oldbin文件中,接着再次发送QUIT信号给旧的master进程,让其处理完请求后再进行关闭
[root@localhost ~]# kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid)
[root@localhost ~]# kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid)
(6)发送WINCH信号给master进程,让master进程控制不让所有的work进程在接收新的请求了,请求处理完后关闭work进程。注意master进程不会被关闭
[root@localhost ~]# kill -WINTH $(cat /usr/local/nginx/logs/nginx.pid)
NGINX的命令行控制
nginx安装到了/usr/local/nginx/sbin
1、查看nginx帮助文档
[root@localhost ~]# /usr/local/nginx/sbin/nginx -h nginx version: nginx/1.16.1 Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives] Options: -?,-h : this help #:显示帮助信息 -v : show version and exit #打印版本号信息并退出
-V : show version and configure options then exit #打印版本号信息和配置信息并退出 -t : test configuration and exit #测试nginx的配置文件语法是否正确并退出 -T : test configuration, dump it and exit #测试nginx的配置文件语法是否正确并列出用到的配置文件信息然后退出 -q : suppress non-error messages during configuration testing #在配置测试期间禁止显示非错误消息 -s signal : send signal to a master process: stop, quit, reopen, reload #后面可以跟:stop[快速关闭,类似于TERM/INT信号的作用] kill -WINCH PID /kill -WINCH`cat /usr/local/nginx/logs/nginx.pid` 1
quit[优雅的关闭,类似于QUIT信号的作用] reopen[重新打开日志文件类似于USR1信号的作用] reload[类似于HUP信号的作用] -p prefix : set prefix path (default: /usr/local/nginx/) #指定Nginx的prefix路径,(默认为: /usr/local/nginx/) -c filename : set configuration file (default: /usr/local/nginx/conf/nginx.conf)#指定Nginx的配置文件路径,(默认为: conf/nginx.conf) -g directives : set global directives out of configuration file 用来补充Nginx配置文件,向Nginx服务指定启动时应用全局的配置
nginx服务器版本升级和新增模块
需求:Nginx的版本最开始使用的是Nginx-1.14.2,由于服务升级,需要将Nginx的版本升级到Nginx-1.16.1,要求Nginx不能中断提供服务。
方案一:使用Nginx服务信号完成Nginx的升级
方案二:使用Nginx安装目录的make命令完成升级
环境准备:
(1)先准备两个版本的Nginx分别是 1.16.1和1.20.1
(2)使用Nginx源码安装的方式将1.16.1版本安装成功并正确访问
进入安装目录
./configure
make && make instal
(3)将nginx1.20.1进行参数配置和编译,不需要进行安装
[root@localhost nginx-1.20.1]# ./configure
[root@localhost nginx-1.20.1]# make
编译成功后 在当前目录下会有编译好的makefile文件 在当前目录下的objs中会有nginx二进制文件
新增模块:
进入到nginx的编译目录下:
[root@localhost nginx-1.16.1]# ./configure
后面要跟安装的模块名,编译好后按照原先升级的步骤进行
方案一:使用nginx服务信号进行升级
1、将1.16.1版本的sbin目录下的nginx备份
[root@localhost nginx-1.16.1]# cd /usr/local/nginx/sbin/ [root@localhost sbin]# mv nginx nginxold
2、将Nginx1.20.1安装目录编译后的objs目录下的nginx文件,拷贝到原来/usr/local/nginx/sbin目录下
cd ~/nginx/core/nginx-1.20.1/objs cp nginx /usr/local/nginx/sbin
3、发送信号USR2给nginx的1.16.1版本对应的master进程
[root@localhost ~]# kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid.oldbin)
4、发送信号QUIT给nginx的1.16.1版本对应的master进程
[root@localhost ~]# kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid.oldbin)
方案二:使用Nginx安装目录的make命令完成升级
1、将1.16.1版本的sbin目录下的nginx备份
[root@localhost nginx-1.20.1]# cd /usr/local/nginx/sbin/ [root@localhost sbin]# mv nginx nginxold
2、将Nginx1.20.1安装目录编译后的objs目录下的nginx文件,拷贝到原来/usr/local/nginx/sbin目录下
cd ~/nginx/core/nginx-1.20.1/objs
cp nginx /usr/local/nginx/sbin
3、进入到安装目录,执行make upgrade
[root@localhost nginx-1.20.1]# make upgrade
4、查看是否更新成功
./nginx -v
在整个过程中,其实nginx是一直对外提供服务的,并且当nginx的服务器启动成功后,我们是可以通过浏览器进行直接访问的,同时可以通过更改html目录下的页面来修改我们在页面上所看到的内容
nginx核心配置文件结构
nginx的核心配置文件默认是放在/usr/local/nginx/conf/nginx.conf
配置文件如下(去除注释行):
worker_processes 1; #指令名 指令值 (全局块,主要设置NGINX服务器整体运行的配置命令)
events { #events块,主要设置nginx服务器与用户的网络连接,这一部分对nginx服务器的性能影响较大 worker_connections 1024; # 指令名 指令值 }
# http块,nginx服务器配置中的重要部分,代理、缓存、日志记录、第三方模块配置 http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { #server块,是nginx配置和虚拟主机相关的内容 listen 80; server_name localhost; location / { # 基于nginx服务器接收请求字符串与location后面的值进行匹配,对特定请求进行处理 root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
nginx.conf 配置文件中默认有三大块:全局块、events块、http块
http块中可以配置多个server块,每个server块又可以配置多个location块
全局块
user指令
(1)user:用于配置运行nginx服务器的worker进程的用户和用户组
语法 | user user [group] |
默认值 | nobody |
位置 | 全局块 |
该属性也可以在编译的时候指定,语法如下./configure --user=user --group=group,如果两个地方都进行了设置,最终生效的是配置文件中的配置
该指令的使用步骤:
(1)设置一个用户信息“www”
user www
(2)创建一个用户
useradd www
(3)修改user属性
user www
(4)创建/root/html/index.html页面,添加如下内容
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body {width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans- serif;} </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to<a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> <p><em>I am WWW</em></p> </body> </html>
(5)修改nginx.conf
location / { root /root/html index index.html index.htm }
测试启动访问
location / { root /home/www/html; index index.html index.htm; }
再次启动访问
work process指令
master_process:用来指定是否开启工作进程
语法 | master_process on|off |
默认值 | master_process on; |
位置 | 全局块 |
worker_processes:用于配置nginx生成工作进程的数量,这个是nginx服务器实现并发处理服务的关键所在。理论上来说workder process的值越大,可以支持的并发处理量也越多,但事实上这个值的设定是需要受到来自服务器自身的限制,建议将该值和服务器CPU的内核数保存一致。
语法 | worker_process num/auto |
默认值 | 1 |
位置 | 全局块 |
如果将worker_processes设置成2,则会看到如下内容:
[root@localhost ~]# ps -ef | grep nginx root 13276 1 0 11:15 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx nobody 13277 13276 0 11:15 ? 00:00:00 nginx: worker process nobody 13278 13276 0 11:15 ? 00:00:00 nginx: worker process root 13301 1292 0 11:16 pts/0 00:00:00 grep --color=auto nginx
其他指令:
daemon:设定nginx是否以守护进程的方式启动。
守护进程是Linux后台执行的一种服务进程,特点是独立于控制终端,不会随着终端关闭而停止
语法 | daemon on|off; |
默认值 | daemon on; |
位置 | 全局块 |
pid:用来配置nginx当前master进程的进程号ID存储的文件路径
语法 | pid file; |
默认值 | 默认为:/usr/local/nginx/logs/nginx.pid |
位置 |
全局块 |
语法 | error_log file[日志级别] |
默认值 | erroe_log/error.log error |
位置 |
全局块、http、server、location |
语法 | include file; |
默认值 | 无 |
位置 |
any |
events块
1、accept_mutex:用来设置Nginx网络连接序列化
语法 | accept_mutex on|off |
默认值 | accept_mutex on; |
位置 |
events |
语法 | multi_accept on|off; |
默认值 | multi_accept off; |
位置 |
events |
语法 | worker_connections number; |
默认值 | worker_connections 512; |
位置 |
events |
语法 | use method; |
默认值 | 根据操作系统定 |
位置 |
events |
events指令配置实例
events{ accept_mutex on; multi_accept on; worker_commections 1024; use epoll; }
http块
定义MIME-Type
include mime.types; default_type application/octet-stream;
1、default_type:用来配置Nginx响应前端请求默认的MIME类型。
语法 | default_type mime-type; |
默认值 | default_type text/plain |
位置 |
http、server、location |
在default_type之前还有一句include mime.types ,include之前我们已经介绍过,相当于把mime.types文件中MIMT类型与相关类型文件的文件后缀名的对应关系加入到当前的配置文件中。
location /get_text { #这里也可以设置成text/plain default_type text/html; return 200 "This is nginx's text"; } location /get_json{ default_type application/json; return 200 '{"name":"TOM","age":18}'; }
自定义服务日志
1、access_log:用来设置用户访问日志的相关属性
语法 | access_log path[format[buffer=size]]; |
默认值 | access_log logs/access.log combined |
位置 |
http、server、location |
语法 |
log_format name [escape=default|json|none]
string....;
|
默认值 |
log_format combined "...";
|
位置 |
http |
其他配置指令
1、sendfile:用来设置Nginx服务器是否使用sendfile()传输文件,该属性可以大大提高Nginx处理静态资源的性能
语法 | sendfile on|off;
|
默认值 |
sendfile off;
|
位置 |
http、server、location |
语法 | keepalive_timeout time;
|
默认值 |
keepalive_timeout 75s;
|
位置 |
http、server、location |
语法 | keepalive_requests number;
|
默认值 |
keepalive_requests 100;
|
位置 |
http、server、location |
server块和location块
server { #server块,是nginx配置和虚拟主机相关的内容 listen 80; server_name localhost; location / { # 基于nginx服务器接收请求字符串与location后面的值进行匹配,对特定请求进行处理 root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }