Nginx reload和restart区别

3,234 阅读1分钟

两者区别

  • reload --重新加载,reload会重新加载配置文件,Nginx服务不会中断。而且reload时会测试conf语法等,如果出错会rollback用上一次正确配置文件保持正常运行。

  • restart --重启(先stop后start),会重启Nginx服务。这个重启会造成服务一瞬间的中断,如果配置文件出错会导致服务启动失败,那就是更长时间的服务中断了。

所以,如果是线上的服务,修改的配置文件一定要备份。为了保证线上服务高可用,最好使用reload。

reload实现过程

  1. 向master进程发送HUP信号(reload命令)
  2. master进程校验配置语法是否正确
  3. master进程打开新的监听端口(如果配置文件添加了新的监听端口)
  4. master进程用新配置启动新的worker子进程
  5. master进程向老worker子进程发送QUIT信号
  6. 老worker进程关闭监听句柄、处理完当前连接后结束进程(老worker不再处理新请求)

FAQ

reload 只是重新加载配置文件,不会清理nginx 的一些缓存,在有些需要清理缓存的场景需要restart ,例如upstream 后端配置的集群服务地址是域名而不是ip,当后端IP 变了,就需要清除该域名的解析缓存,此时需要重启而不是reload。