我使用 nginx 作为反向代理。每当我使用它更新配置时
sudo "cp -r #{nginx_config_path}* /etc/nginx/sites-enabled/"
sudo "kill -s HUP `cat /var/run/nginx.pid`"
Run Code Online (Sandbox Code Playgroud)
我面临短暂的停机时间。我怎样才能避免这种情况?
Hen*_*jie 233
运行service nginx reload或/etc/init.d/nginx reload
它将在不停机的情况下热重新加载配置。如果您有待处理的请求,那么将会有 nginx 进程在它们终止之前处理这些连接,因此这是一种非常优雅的重新加载配置的方式。
有时你可能想在前面加上 sudo
小智 106
跑 /usr/sbin/nginx -s reload
有关更多命令行选项,请参阅http://wiki.nginx.org/CommandLine。
cns*_*nst 11
不,您是不正确的,您不应该因您描述的程序而面临任何停机时间。(Nginx 不仅可以在没有任何停机时间的情况下即时重新加载配置,甚至可以即时升级可执行文件,仍然没有任何停机时间。)
根据http://nginx.org/docs/control.html#reconfiguration,将HUP信号发送到 nginx 确保它执行正常重启,如果配置文件不正确,则整个过程将被放弃,并且您和发送HUP信号之前一样,继续留在 nginx 中。在任何时候都不应该有任何停机时间。
为了让 nginx 重新读取配置文件,应该向主进程发送一个 HUP 信号。主进程首先检查语法有效性,然后尝试应用新的配置,即打开日志文件和新的监听套接字。如果失败,它会回滚更改并继续使用旧配置。
小智 5
kill您使用的方法 ( kill -s HUP $(cat /var/run/nginx.pid) 是正确的。RH 或 Debian 发行版的初始化脚本最终也使用kill命令实现。您可以从 nginx 网站或Ubuntu Nginx 包的内容中查看Init 示例。
nginx 可以侦听多种信号(在 wiki 中提到):
TERM, INT- 快速关机。QUIT - 优雅关机。KILL - 停止顽固的过程。HUP- 配置重新加载。使用新配置启动新的工作进程。优雅地关闭旧的工作进程。USR1 - 重新打开日志文件。USR2 - 即时升级可执行文件。WINCH - 优雅地关闭工作进程。Nginx reload( HUPsignal)具体实现为几个步骤[1,2]:
我能想到的唯一一个问题是您为什么会停机(基于重新加载过程)是您只使用了一个工作进程(worker_processes指令),该进程设计为为旧客户端提供服务,但已关闭侦听套接字,因此您不能打开新连接。
我还可以建议您/usr/sbin/nginx -t在应用新配置之前始终使用来验证配置文件。
重新配置信号在文件中处理,ngx_process_cycle.c我们可以看到它在函数中启动新的工作进程,ngx_start_worker_processes(...)最后它在函数中停止旧的工作进程ngx_signal_worker_processes(...),它用信号迭代它们NGX_SHUTDOWN_SIGNAL。
资源:
| 归档时间: |
|
| 查看次数: |
291744 次 |
| 最近记录: |