最近遇到了好几次nginx -s reload不生效的问题。主要有以下两个原因
1.nginx的master进程挂了
ps -ef | grep nginx 检查master进程在不在,如果挂了重启一下nginx就好了
2.nginx有worker进程没有shutdown

nginx reload的原理是新生成一个worker进程,新连接会跑到新的worker进程上,老进程在所有连接结束后会关闭。 但是如果nginx配置中如果出现了支持WebSocket协议的配置,有可能会出现客户端长时间不断开,nginx老进程长时间存在的情况。 像我截图这个进程,已经持续shutting down状态三天了还没成功关闭。
从我测试的情况看下来,当出现进程is shutting down的情况,nginx -s reload就不会生效。
检查所有nginx服务器上所有的配置文件可以看到,只有jumpserver配置了WebSocket。是jumpserver存在客户端进程一直连接的情况导致的。 解决办法就是,在其他服务器上新增nginx,只迁移存放jumpserver一个应用的配置文件,因为jumpserver平时也不需要reload,长连接是否断开也无所谓了。
