用了好几年的 Nginx
,一致没有去深究他们两个之间的区别,一直以为都是重启命令,但是用的时候也是用 nginx -s reload
比较多。这一段时间正在用 Docker
折腾 Nginx
,所以看了看 Nginx
的官方文档,忽然发现 nginx -s
命令的使用。
官方文档:https://nginx.org/en/docs/beginners_guide.html
1. 语法:
nginx -s signal
signal
的值如下:
stop
— fast shutdown:快速的停止 nginxquit
— graceful shutdown:不再接受新的请求,等正在处理的请求出完成后在进行停止(优雅的关闭)reload
— reloading the configuration file:重新加载配置文件reopen
— reopening the log files:重新写入日志文件
2. 两者区别:
nginx -s reload
(热重载):Nginx
服务不会终止,使用主进程检查配置,如果配置文件语法正确,则主进程会启动一个新的工作进程处理新来的请求。主进程发送消息给原来的工作进程,通知旧的进程不在接受请求,处理完现有的请求后退出(优雅退出);如果语法不正确,则继续使用旧的进程继续处理请求。
service nginx restart
(重启):该条命令的执行过程如下,nginx -s stop
-> nginx
先将 Nginx 快速的停止(等同于 service nginx stop
),然后在执行启动命令(等同于 service nginx start
),启动的时候会造成短暂的服务中断;如果配置文件语法错误,那问题就大了,有可能会造成更长时间的中断,有可能会造成很大的宕机。
【注】
1. 如果是正式环境需要修改配置文件时,先把原有的配置文件备份一下,然后在进行修改;修改完成后先通过 nginx -t
检查一下配置文件是否有错误,如果没有的话再进行 nginx -s reload
热加载.
2. 如果要求停止 Nginx 或者是 释放 Nginx 资源时,我们才使用 service nginx stop
或 service nginx restart
命令,否则一般都是用 nginx -s reload
。