Nginxconfiguration无需停机即可重新加载

我使用nginx作为反向代理。 每当我更新它的configuration使用

sudo "cp -r #{nginx_config_path}* /etc/nginx/sites-enabled/" sudo "kill -s HUP `cat /var/run/nginx.pid`" 

我面临一个短暂的停机时间。 我怎样才能避免呢?

运行service nginx reload/etc/init.d/nginx reload

它会在没有停机的情况下进行configuration的热重新加载。 如果你有待处理的请求,那么将会有nginx进程在处理之前处理这些连接,所以这是一种非常优雅的方式来重新加载configuration。

有时你可能想用sudo来预先设定

不,你是不正确的,你不应该面对你所描述的程序的任何停机时间。 (Nginx不仅可以在不停机的情况下进行configuration重新加载,而且可以即时升级可执行文件,而无需停机。)

根据http://nginx.org/docs/control.html#reconfiguration ,将HUP信号发送给nginx确保它执行平稳重启,并且如果configuration文件不正确,则整个过程将被废弃,而您在发送HUP信号之前,与nginx一起离开。 任何时候都不应该停工。

为了让nginx重新读取configuration文件,HUP信号应该被发送到主进程。 主进程首先检查语法的有效性,然后尝试应用新的configuration,即打开日志文件和新的侦听套接字。 如果失败,它将回滚更改并继续使用旧configuration。

通常情况下,重新加载服务的configuration文件不应该影响正在运行的服务。 但是,这取决于如何处理SIGHUP信号。

如果特定服务在重新加载期间遇到停机时间,则可以通过在多个服务器上运行相同的服务(最好使用负载平衡器)来避免这种情况。 在这种情况下,您可以一次取出一个服务器并重新加载/重新启动。 然后,确认后可以重新添加。