我在CentOS 6和7上使用NGINX 1.8.1。在部署期间,要求NGINX停止,部署执行,NGINX再次启动。 不幸的是,NGINX在一个站点似乎只有500个连接。 由于我一次使用Ansible来更新2/10个主机,因此很可能在我们的整个部署过程中,我们的许多客户将获得500个主机。
有没有办法通过NGINX设置让NGINX进程耗尽所有活连接(即等待它们完成),同时在停止期间拒绝所有新连接?
我知道亚马逊的弹性负载均衡器确实有这个function ,那么NGINX有没有相同的function?
根据评论,你可以尝试使用防火墙来解决这个问题:
任务:阻止传入的新连接,但保持相关和build立的连接
试试: iptables -I INPUT -j DROP -p tcp --syn --destination-port 80 (或443,无论适用于您的设置)设置规则,从而阻止新的stream量
做你的部署…
试试: iptables -D INPUT -j DROP -p tcp --syn --destination-port 80 (或443,无论适用于您的设置)恢复规则,从而允许新的stream量
注意:我刚刚testing过,它按预期工作。 但是:请不要把这看成是理所当然的,也要为自己testing一下。 反馈欢迎…
编辑:正如@Guntram Blohm在评论中指出的,最好使用iptables -I而不是iptables -A 。 在上面的代码中适当地改变了这个。
发送nginx的“QUIT”信号来执行正常关机 ,这会停止监听新连接,但允许工作人员继续为主动连接提供服务。
这是值得区分优雅关机和连接排水 ; 优雅的关机会影响NGINX在服务器closures时如何处理传入的连接,但连接耗尽(正如Martijn Heemels提到的是NGINX Plus的一个特性)涉及NGINX作为负载平衡器时如何从服务中删除后端服务器。 从你的问题来看,这听起来像你对前者更感兴趣。
据我所知,连接耗尽仅在商业版本Nginx Plus中可用。
这里有一个function的说明: https : //www.nginx.com/blog/nginx-plus-r5-released/
它是ngx_http_upstream_conf_module模块的一部分。