Keepalive Nginx-Haproxy-Apache链的最佳实践

我使用Nginx来提供静态内容,Haproxy代理请求到通过Zookeeper发现的多个Apache2后端。

Nginx – > Haproxy – > Apache2

根据Nginx官方网站的说法,它将这种长时间保持连接的方式聚集在这样的后端,将连接数量降到最低。

因此,我的假设是,Nginx是Keepalive必须在哪里,并设置一个更大的价值,在我的情况“keepalive_timeout 600”;

然后在本地端口上点击Haproxy,Apache后端的“httpclose”选项打开:

选项httpclose启用或禁用被动H​​TTP连接closures

HAProxy还不支持HTTP保持活动模式。 所以在默认情况下,如果一个客户端在这种模式下与服务器进行通信,它将只分析,logging和处理每个连接的第一个请求。 要解决这个限制,可以指定“选项httpclose”。 它将检查每个方向是否已经设置了“连接:closures”标题,并且如果缺失则添加一个标题。 每一端都应该在每次传输之后主动closuresTCP连接,从而导致切换到HTTPclosures模式。 任何“连接”标题不同于“closures”也将被删除。

这个选项可以设置在前端和后端。 如果前端或后端中至less有一个持有连接,则启用该function。

然后Haproxy将连接路由到Apache2。

所以,我的假设是,在这种情况下,我将不得不closuresApache的keepalive,因为a)Nginx聚合连接b)Haproxyclosures它们。

我的推理是否正确,在这样的链条上优化Keepalive会更好吗?

更新: 这个 ServerFault主题指出,从Haproxy中移除Keepalive也是有益的(因此我们可以去掉httpclose),因为Haproxy和Apache之间的延迟太低,无法消除握手。

所以我们用Nginx(KA) – > Haproxy(没有KA) – > Apache(没有KA)

这是更好的select吗?