强制 nginx 关闭连接

强制 nginx 关闭连接

我们的设置如下:

客户端 -> AWS ELB(tcp 负载平衡)-> NGINX(ssl 终止)-> 应用程序服务器。

我们希望从容地将应用服务器从负载均衡器中移除。为此,我们进行了健康检查,当节点即将关闭时,会以 503 响应,同时允许任何待处理的请求完成。

但是,由于 nginx 配置为使用 keep-alive,即使节点已脱离负载均衡器,已经建立连接的客户端仍可能继续发送新的请求。

在应用程序服务器的所有响应中设置Connection: close标头没有帮助,因为 nginx(根据 RFC,这是正确的)不会将其传递给客户端。

除了完全禁用保持活动功能之外,还有其他方法吗?

答案1

我们通过更新 nginx 配置来解决这个问题,以禁用 keep-alive(通过将 keepalive_requests 和 keepalive_timeout 都设置为 0),然后在应用程序关闭过程的一部分重新加载 nginx。

只需重新加载配置就足够了,因为 nginx 在重新加载时会启动一个新的工作进程,并且只保留旧的工作进程,直到它们完成正在进行的请求。

相关内容