重新启动 NGINX 进程时是否耗尽连接?

重新启动 NGINX 进程时是否耗尽连接?

我在 CentOS 6 和 7 上使用 NGINX 1.8.1。在部署期间,需要停止 NGINX,执行部署,然后重新启动 NGINX。不幸的是,停止期间的 NGINX 似乎只对所有连接进行 500 次处理。由于我使用 Ansible 一次更新 2/10 个主机,因此很可能我们的许多客户端在整个部署过程中都会遇到 500 次处理。

是否有办法通过 NGINX 设置让 NGINX 进程耗尽所有实时连接(即等待它们完成)同时在停止期间拒绝所有新连接?

我知道亚马逊的弹性负载均衡器确实有这个功能那么,有没有与 NGINX 相当的呢?

答案1

根据评论,您可以尝试使用防火墙解决此问题:

  • 任务:阻止新传入的连接,但保留相关的和已建立的连接

  • 尝试:(iptables -I INPUT -j DROP -p tcp --syn --destination-port 80或 443,无论适用于您的设置)设置规则,从而阻止新流量

  • 进行部署...

  • 尝试:(iptables -D INPUT -j DROP -p tcp --syn --destination-port 80或 443,无论适用于您的设置)恢复规则,从而允许新的流量

  • 注意:我刚刚对此进行了短暂的测试,它按预期工作。但是:请不要认为这是理所当然的,也要亲自测试一下。欢迎反馈...

编辑:正如@Guntram Blohm 在评论中指出的那样,最好使用iptables -I而不是iptables -A。在上面的代码中对此进行了适当的更改。

答案2

向 nginx 发送“QUIT”信号来执行优雅关机,它停止监听新连接但允许工作者继续为活动连接提供服务。

有必要区分正常关机和连接耗尽; 正常关闭会影响 NGINX 在服务器关闭时如何处理传入连接,但连接耗尽(正如 Martijn Heemels 提到的,这是 NGINX Plus 的一个功能)处理 NGINX 在充当负载平衡器时如何从服务中删除后端服务器。从您的问题来看,您似乎对前者更感兴趣。

答案3

据我所知,连接耗尽仅在商业版本 Nginx Plus 中可用。

这里有该功能的描述:https://www.nginx.com/blog/nginx-plus-r5-released/

这是ngx_http_upstream_conf_module 模块

相关内容