什么时候重启而不重新加载 Nginx?

Posted

技术标签:

【中文标题】什么时候重启而不重新加载 Nginx?【英文标题】:When to restart and not reload Nginx? 【发布时间】:2012-11-11 14:31:19 【问题描述】:

什么时候需要重启nginx,reload就不行了? 如果使用像passenger 这样的扩展名会有什么不同吗?

如果服务消耗太多内存,是否应该重新启动服务。重启 Nginx 的任何其他原因,尤其是在扩展或 Nginx 核心配置中的配置更改之后?

在进行配置更改后,可以通过 binary 本身或 Ubuntu 上的 init.d 脚本“/etc/init.d/nginx -h”重新启动或重新加载 nginx。应该首选哪种方法?

【问题讨论】:

我不明白你的最后一段。这是一个问题吗? 【参考方案1】:

重新加载 nginx 比重新启动更安全,因为在终止旧进程之前,会解析新的配置文件,如果有任何问题,整个进程都会中止。

另一方面,当你重新启动 nginx 时,你可能会遇到由于语法错误而导致 nginx 停止并且不会重新启动的情况。

重新加载会终止旧进程,因此无论如何都应该清除任何内存泄漏。

【讨论】:

像modrails.com/documentation/Users%20guide%20Nginx.html 这样的 ngixn 扩展会有什么不同吗? 嗯,当使用乘客时,通常更明智的做法是重新启动应用程序服务器而不是 Web 服务器(在这种情况下,通过触摸 tmp/restart.txt 文件),但除此之外它应该完全一样。 如果我在nginx -t 之前检查语法怎么办?那有什么区别呢? 来自 nginx 指南:一旦主进程接收到重新加载配置的信号,它会检查新配置文件的语法有效性并尝试应用其中提供的配置。如果这是成功的,主进程启动新的工作进程并向旧的工作进程发送消息,请求它们关闭。否则,主进程将回滚更改并继续使用旧配置。【参考方案2】:

我遇到过需要重新启动 nginx 才能让 listen 指令启动新 IP 地址的情况。

【讨论】:

我刚才也有同样的经历……我快疯了,直到我想通了!!【参考方案3】:

Ztyx 是对的——在某些情况下需要在更改监听指令时重新启动。

使用1.6.x,更改监听IP地址时可以重新加载,但从“*:80”监听到IP地址“x.x.x.x:80”时需要重新加载。

我只用 IPv4 确认了这一点,IPv6 的行为可能类似。

【讨论】:

以上是关于什么时候重启而不重新加载 Nginx?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 php 重启或重新加载 nginx

如何重启或重新加载nginx使用PHP

Nginx常用命令(启动/重启/停止/测试配置文件/重新加载配置文件)

使用Nginx命令启动,停止和重新加载Nginx

nginx启动,重启,重新加载,以及前缀路径设置

如何优雅地重启 django 在 nginx 后面运行 fcgi?