前言
本文主要内容为Nginx命令行的参数详解、如何为Nginx进行平滑升级以及Nginx平滑升级的原理。
启动Nginx
启动Nginx,Nginx从命令行调用,通常位于/usr/bin/nginx 启动Nginx的基本示例:
/usr/bin/nginx
启动Nginx的高级示例:
/usr/bin/nginx -t -c ~/mynginx.conf -g "pid /var/run/nginx.pid; worker_processes 2;"
Nginx支持的命令行参数
-?,-h 打印命令行参数帮助。
-c file 使用指定的配置文件,而不是默认文件。
-g directives 设置全局配置指令,例如,nginx -g "pid /var/run/nginx.pid; worker_processes 2;"
-p prefix 设置nginx路径前缀,即将保留服务器文件的目录(默认值为/usr/local/nginx)。
-q 在配置测试期间抑制非错误消息。
-s signal 向主进程发送信号。参数信号可以是下列之一:
stop 快速关闭
quit 优雅地关闭
reload 重新加载配置,使用新配置启动新的工作进程,正常关闭旧工作进程。
reopen 重新打开日志文件
stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息。
-t 测试配置文件:nginx检查配置是否有正确的语法,然后尝试打开配置中引用的文件。
-T 与-t相同,但另外将配置文件转储到标准输出(1.9.2)。
-v 打印nginx版本。
-V 打印nginx版本,编译器版本和配置参数。
Nginx 只有几个命令行参数。与许多其它的软件系统不同,配置完全通过配置文件完成。
停止或重新启动Nginx
Nginx一旦运行,有两种方式来控制。
第一个是使用-s命令行参数再次调用Nginx。例如,/usr/bin/nginx -s stop将停止Nginx服务器。(其他-s选项在上一节给出) 第二种控制Nginx的方法是向Nginx主进程发送信号。默认情况下,Nginx将其主进程ID写入/usr/local/nginx/logs/nginx.pid。你可以通过在编译时使用./configure传递参数或在配置文件中使用pid指令来更改此设置。
以下表示如何向Nginx主进程发送QUIT(Graceful Shutdown)信号:
kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid )
主进程可以处理以下信号:
TERM,INTQuick shutdown 快速关闭
QUITGraceful shutdown 正常关闭
KILLHalts a stubborn process 停止一个顽固的进程
HUPConfiguration reload ,Start the new worker processes with a new configuration ,Gracefully shutdown the old worker processes 重加载配置,使用新的配置启动新的工作进程,正常关闭旧的工作进程
USR1Reopen the log files 重新打开日志文件
USR2Upgrade Executable on the fly 执行升级,并启动新版Nginx
WINCHGracefully shutdown the worker processes 正常关闭工作进程
正常情况下不需要自己控制工作进程,但是他们也支持一些信号:
TERM,INTQuick shutdown 快速关闭
QUITGraceful shutdown 正常关闭
USR1Reopen the log files 重新打开日志文件
平滑升级
如果需要使用新的版本替换Nginx(升级到最新版本或添加/删除模块时),你可以在没有任何服务停机时间的情况下执行此操作,不会丢失任何传入的请求。
首先,用一个新的Nginx程序替换旧程序文件,也可以通过编译安装直接编译到Nginx安装目录中。然后发送USR2信号到主进程。
kill -USR2 旧版Nginx的主进程号
它将其.pid文件重命名为.oldbin(如/usr/local/nginx/logs/nginx.pid.oldbin),然后执行一个新的二进制文件,启动一个新的主进程,新的工作进程。 此时,Nginx共有两个实例正在运行(原来的和新启动的),一起处理传入的请求。要将旧实例退出,你必须向旧实例主进程发送WINCH信号,然后其工作进程将开始正常关闭。
kill -WINCH 旧版Nginx的主进程号
一段时间后,旧的工作进程全部退出,将只有新的工作进程正在处理传入的请求。
此时,仍然可以还原到旧的Nginx服务,因为它尚未关闭其监听sockets,可按照下列步骤操作:
在新的主进程退出后,旧的主进程从其.pid文件中删除.oldbin后缀,一切都与升级前一样。
如果更新成功并且要保留新服务器,请向旧主进程发送QUIT信号,以仅保留新服务器正在运行。
更多精彩文章:
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|