我们有一个 Apache 正向代理,向数千个后端服务器发送请求。
服务器存在故障,因为它们要求初始质询请求(无身份验证)和下一个请求(有身份验证)都位于同一个 http 连接上。我们无法在任何合理的时间内修复此问题。
所以我们希望正向代理使用相同的连接,可能通过连接池?
默认情况下,Apache 转发代理在收到响应后立即关闭连接。这是设计使然
“正向代理的默认工作器不使用简单意义上的连接池。它会在每次请求后关闭每个连接。
Ryujiro Shibuya 观察到的是,Apache 发出信号表示即使在正向代理模式下也会保持连接打开,但随后实际上会关闭连接。我们正在讨论对此问题的解决方案,即始终从一开始就为默认的正向和反向代理工作程序发出“连接:关闭”信号。“
有一些建议可以解决这个问题:
“不过,你可以定义显式的工作程序(例如,使用 ProxyPass 进行反向代理,正如 Rüdiger 所写,也可能使用正向代理模式,然后它将使用 HTTP Keep-Alive(默认情况下,取决于几个配置选项)”
但我不知道该怎么做。可能与 ProxySet 有关?问题是我需要以某种方式指定 URL,但这是一个正向代理 - 有许多可能的原始服务器,我无法预先枚举它们。
我们应该如何配置才能重新使用此连接?
答案1
(这应该是一条评论,但是有点长)
我们有一个 Apache 正向代理,向数千个后端服务器发送请求。
但您刚刚才注意到它不工作了?
如果您可以在单个 Apache 实例上处理“数千台服务器”的流量,则表明您的架构存在问题。
您不能依赖链中的每个组件(即不仅仅是您的代理)以后端服务器似乎期望的方式实现保持活动。因此,您在这里尝试的最多只是缓解问题。
我强烈建议您解决此问题的根本原因。
所以我们希望正向代理使用相同的连接,可能通过连接池?
否。连接池维护一组与源服务器的开放连接。它不会将客户端连接与源服务器连接绑定在一起。
在不了解代理服务器内部情况的情况下,很难建议采取何种正确的解决方法;虽然 Apache 是一个极好的网络服务器,但恕我直言,有更好的工具可以用作代理(ATS、haproxy、pound、squid、nginx、varnish)。
根据我对 Apache httpd 的了解,我认为不可能实现您想要实现的目标。