在Linux下,Nginx服务的主要操作就是启动、停止和重启。

1.Nginx的启动:

如果nginx安装在/usr/local/nginx/ 目录中,那么启动nginx的命令就是:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf  #"-c"指定了配置文件的路径,如果不加该参数,Nginx会默认加载其安装目录的conf子目录中的nginx.conf文件。

2. Nginx的停止:

我们可以通过ps命令来查找Nginx的主进程号:

ps -ef | grep nginx

(1) 从容停止
kill -QUIT Nginx 主进程号

kill -QUIT `/usr/local/nginx/logs/nginx.pid`

(2)快速停止
kill - TERM Nginx 主进程号
kill - TERM `/usr/local/nginx/logs/nginx.pid`

kill -INT Nginx 主进程号
kill -INT `/usr/local/nginx/logs/nginx.pid`

(3)强制停止所有Nginx进程
pkill -9 nginx

3. Nginx的平滑重启

如果改变了Nginx的配置文件(nginx.conf),重启之前需要确认(nginx.conf)的语法是否正确,否则nginx将不会加载新的配置文件,通过以下命令可以判断新的配置文件是否正确:

/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

如果正常,即可平滑重启nginx

kill -HUP Nginx 主进程号
kill -HUP `/usr/local/nginx/logs/nginx.pid`

当Nginx接受到HUP信号时,它会尝试先解析配置文件(如果指定配置文件,就使用指定的,否则使用默认的),如果成功,就应用新的配置文件(例如重新打开日志文件或监听的套接字)。之后,Nginx运行新的工作进程并从容关闭旧的工作进程。通知工作进程关闭监听套接字,但是继续为当前的连接客户提供服务。所有客户端的服务完成后,旧的工作进程将被关闭。如果新的配置文件应用失败,Nginx将继续使用旧的配置进行工作。

4. Nginx的信号控制

TERM,INT 快速关闭;
QUIT 从容关闭;
HUP 平滑重启,重新加载配置文件;
USR1 重新打开日志文件,在切割日志时用途较大;
USR2 平滑升级可执行程序;
WINCH 从容关闭工作进程;

5. Nginx的平滑升级

(1)使用新的可执行程序替换旧的可执行程序,对于编译安装的Nginx,可以将新版本编译安装到旧版本的Nginx安装路径中。替换之前,需要备份下旧的可执行文件。

(2)发送以下指令:

kill -USR2 旧版本的Nginx主进程号

(3)旧版本Nginx的主进程将重命名它的 .pid文件为 .oldbin(例如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新版本的Nginx可执行程序,依次启动新的主进程和新的工作进程。

(4)此时,新旧版本的Nginx实例会同时运行,共同处理输入的请求。要逐步停止旧版本的Nginx实例,你必须发送WINCH信号给旧的主进程,然后,它的工作进程就将开始从容关闭:
kill -WINCH 旧版本的Nginx主进程号

(5)一段时间后,旧的工作进程处理了所有已连接的请求后退出,仅有新的工作进程来处理输入的请求了;

(6)这时候,我们可以决定是使用新版本还是恢复到旧版本;(以下是恢复到旧的版本)

kill -HUP 旧的主进程号  #Nginx将在不重载配置文件的情况下启动它的工作进程;
kill -QUIT 新的主进程号 #从容关闭其它工作进程;
kill -TERM 新的主进程号 #强制退出