![当无法保证路由到同一主机时,如何调整 nginx 保持活动设置?](https://linux22.com/image/750230/%E5%BD%93%E6%97%A0%E6%B3%95%E4%BF%9D%E8%AF%81%E8%B7%AF%E7%94%B1%E5%88%B0%E5%90%8C%E4%B8%80%E4%B8%BB%E6%9C%BA%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E8%B0%83%E6%95%B4%20nginx%20%E4%BF%9D%E6%8C%81%E6%B4%BB%E5%8A%A8%E8%AE%BE%E7%BD%AE%EF%BC%9F.png)
我有一个场景,其中许多服务器正在运行一个 nginx 实例。无论如何,这些大多只是代理请求。这些主机都位于硬件负载平衡器后面,并且不一定能够(或出于各种原因,不需要)启用粘性。
尽管如此,我们目前仍然尊重保持活动以减少 SSL 握手;但我认为这只有在客户端在初始握手后恰好被路由到同一主机时才有效。
因此,我们最终会在每台主机上打开数千个空闲连接;在某个时候,我们的硬件路由器会受够这些连接并开始向客户端发送 RST 数据包。(如果没有,我怀疑我们会达到 nginx 中的开放连接限制,因此除了硬件路由器之外仍然存在问题)。
我的问题是(或者说,我的问题是):
- 我可以让 nginx 将每个请求视为一个简单的事务而不遵守 keep-alive 吗?这样合理吗?我知道我以前使用过的一些服务基本上都是这样做的,但对于希望他们的 Keep-Alive 标头得到尊重的客户端来说,这是否有潜在的缺点?显然,这可能会导致更多的 SSL/TLS 协商,但就我而言,这没问题。
- 是否有关于在 nginx 中正常终止空闲客户端连接的最佳实践?
- 允许这些空闲连接堆积在主机上合理吗?堆积到什么程度?成千上万个空闲连接?
答案1
也许我不明白这个问题,但是keepalive_timeout
将 nginx 配置设置为 0 不应该可以实现您的要求吗?
https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout
要添加的行就是
keepalive_timeout 0;