Nginx 服务的启停方式

1、Nginx 服务的信号控制

2、Nginx 的命令行控制

 

Nginx 服务的信号控制

1、Nginx 后台进程

(1)一个 master 进程、多个 worker 进程

(2)master 进程:管理 worker 进程,包含接收外界的信息,并将接收到的信号,发送给各个 worker 进程,监控 worker 进程的状态,当 worker 进程出现异常退出后,会自动重新启动新 worker 进程

(3)worker 进程:处理用户请求,各个 worker 进程之间是平等,且相互独立,处理请求的机会相同

2、获取 master 进程 pid

(1)方式一

ps -ef | grep nginx;

(2)方式二:查看 /usr/local/nginx/logs/nginx.pid,获取 Nginx 的 master pid

3、调用命令

kill -signal PID

(1)-signal:信号

(2)PID:master 进程 pid

4、master 进程所接收信号

(1)TERM / INT:master 进程立即关闭 Nginx 服务

(2)QUIT:master 进程会控制所有 worker 进程,不再接收新的请求,等所有请求处理完后,再关闭所有进程

(3)HUP:平滑更改配置:master 进程会把控制旧 worker 进程,不再接收新的请求,等处理完请求后,关闭旧 worker 进程,然后根据 Nginx 配置文件,重新启动新 worker 进程

(4)USR1:重新加载日志文件

(5)USR2:通知 master 进程平滑升级,旧 master 进程监听的所有 fd,拷贝至新 master 进程,重命名 pid 文件,fork 子进程,启动新 master 进程,新 master PID 被记录在 /usr/local/nginx/logs/nginx.pid,旧 master PID 被记录在 /usr/local/nginx/logs/nginx.pid.oldbin

(6)WINCH:master 进程控制所有 worker 进程,不再接收新请求,请求处理完后,关闭所有 worker 进程,但不关闭 master 进程

 

改变配置

1、为了让 nginx 重新读取配置文件,应该向主进程发送一个 HUP 信号

2、主进程首先检查语法的有效性,然后尝试应用新的配置,即打开日志文件和新的监听套接字

(1)若失败,就回滚更改,继续用旧的配置工作

(2)若成功,启动新的工作进程,并要求旧的工作进程 QUIT,旧的工作进程关闭监听套接字,继续为旧的客户提供服务,在所有客户都完成服务后,旧的工作进程被关闭

 

轮换日志文件

1、为了轮换日志文件,首先需要对它们进行重命名

2、向主进程发送 USR1 信号

(1)主进程将重新打开所有当前打开的日志文件,并给它们分配一个非特权用户,作为所有者,工作进程在该用户下运行

(2)重新打开成功后,主进程关闭所有打开的文件,并将消息发送给工作进程,要求他们重新打开文件

(3)工作进程也会立即打开新文件,并关闭旧文件

3、旧文件可以立即用于后期处理,如:压缩

 

平滑升级 Nginx

1、备份旧文件,编译(make)新版本,将 objs 目录下的新可执行文件,放在旧文件的位置

2、向主进程发送 USR2 信号

(1)主进程首先将其带有 pid 文件,重命名为带有后缀 .oldbin 的新文件,使用一个新的可执行文件,启动新的工作进程,所有工作进程(新旧进程)继续接受请求

(2)如果 WINCH 信号被发送到旧的主进程,它将向其工作进程发送消息,要求它们优雅地关闭,并且它们将开始退出,一段时间后,只有新的工作进程会处理请求,旧的主进程并不关闭它的监听套接字,如果需要,它可以被管理,再次启动它的工作进程

3、如果由于某种原因,新的可执行文件工作不可接受,可以采取以下措施之一

(1)向旧的主进程发送 HUP 信号,旧的主进程将启动新的工作进程,而无需重新读取配置,之后,通过向新的主进程发送 QUIT 信号,可以优雅地关闭所有新进程

(2)向新的主进程发送 TERM 信号,它将向其工作进程发送一条消息,要求它们立即退出,,如果新进程由于某种原因没有退出,应该向它们发送 KILL 信号以迫使它们退出,当新的主进程退出时,旧的主进程将自动启动新的工作进程

(3)如果新的主进程退出,那么旧的主进程将抛弃文件名中带有 .oldbin 的后缀

(4)如果升级成功,那么应该向旧的主进程发送 QUIT 信号,只有新的进程会留下来

 

Nginx 命令行控制

1、显示帮助信息

nginx -?
nginx -h

2、打印版本号信息并退出

nginx -v

3、打印版本号信息、配置信息并退出

nginx -V

4、测试 nginx 配置文件语法是否正确,并退出

nginx -t

5、测试 nginx 配置文件语法是否正确,并列出所用的配置文件信息,然后退出

nginx -T

6、在配置测试期间禁止显示非错误消息

nginx -q

7、信号

nginx -s signal

(1)stop:快速关闭,类似 TERM / INT 信号

(2)quit:优雅的关闭,类似 QUIT 信号

(3)reopen:重新打开日志文件,类似 USR1 信号

(4)reload:类似 HUP 信号

8、指定 Nginx 的 prefix 路径,默认为 /usr/local/nginx/

nginx -p prefix

9、指定 Nginx 的配置文件路径,默认为 conf/nginx.conf

nginx -c file

10、补充 Nginx 配置文件,向 Nginx 服务指定启动时,应用全局的配置

nginx -g directives