区别
- reload:重新加载,reload会重新加载配置文件,Nginx服务不会中断。而且reload时会测试conf语法等,如果出错会rollback用上一次正确配置文件保持正常运行。
- restart:重启(先stop后start),会重启Nginx服务。这个重启会造成服务一瞬间的中断,如果配置文件出错会导致服务启动失败,那就是更长时间的服务中断了。
所以,如果是线上的服务,修改的配置文件一定要备份。为了保证线上服务高可用,最好使用reload。
reload 实现过程
- 向Master进程 发送 HUP 信号(reload命令)
- Master进程 校验配置语法是否正确
- Master进程 打开新的监听端口(如果配置文件增加了新端口)
- Master进程 用新配置启动新的Worker子进程
- Master进程 向老Worker子进程发送QUIT 信号
- 老Woker进程 关闭监听句柄,处理完当前请求后结束进程
注意
reload 只是重新加载配置文件,不会清理nginx 的一些缓存,在有些需要清理缓存的场景需要restart ,例如upstream 后端配置的集群服务地址是域名而不是IP,当后端IP 变了,就需要清除该域名的解析缓存,此时需要重启而不是reload。