使用 Apache,如果我想稍微修改我服务器上某个网站的“重写规则”,我只需编辑几行/var/www/website5/.htaccess
,保存,它就会立即生效。
好处:不需要service apache2 restart
,因此不会中断正在进行的连接其他网站位于同一台服务器上(假设有人正在下载 1 GB 的大文件,我不想打断它!)。
问题:我现在正在测试 nginx,我读到没有与 .htaccess 等同的“自然”版本(当然,有一些附加组件可以实现这一点,但在这里我真正关注的是理解 nginx 的原始理念,它没有这个功能)。
如何稍微修改nginx
网站的配置(例如 URL 重写规则),而不需要重新启动整个服务器(托管许多网站)?
附言:
如果存在“优雅重新加载”功能,该功能在重新启动 nginx 之前等待请求终止,这是否意味着如果客户端刚刚开始下载一个将持续 2 小时的 2GB 文件,则 nginx 将等待 2 小时(等待请求完成)再重新加载新配置?
如果我们必须等待几分钟/几小时来测试配置修改是否完成,那么修改配置将非常困难。如果不存在后一个问题,它是如何工作的?(是否有关于这一具体观点的文献资料来源?)
答案1
可以使用“reload”来避免重新启动 nginx 服务。您可以使用命令service nginx reload
。这将重新加载 nginx 而不会停机。请务必先检查您的 nginx 语法:service nginx configtest
。
这可以通过一个命令完成:
service nginx configtest && service nginx reload
第一个命令的wil &&
only continue 给出了 0 退出代码,表明配置语法没有问题。
在重新加载时,Nginx 进程将正常关闭。有关此内容的更多信息,请参阅Nginx 文档。
例子:
如果您有 4 个 Nginx 工作进程,其中一个进程负责长时间下载,则重新加载后您将有 5 个工作进程:4 个新的工作进程和一个处理下载直至完成(标记为关闭)的工作进程。