mod_rewrite+proxy 关闭与后端的连接(keepalive)

mod_rewrite+proxy 关闭与后端的连接(keepalive)

我们有一个相当典型的设置:客户端<-> apache2(2.2.22)<-> 后端(*)。

最初我们以最简单的形式使用带有 [P] 标志的 mod_rewrite:

<VirtualHost *:80>
  RewriteEngine On
  ProxyPreserveHost On
  RewriteRule ^(.*)$ http://localhost:8081$1 [P,L]
</VirtualHost>

但是使用这种设置,即使客户端使用保持活动连接并使用一个 tcp 连接向 apache 发送多个 http 请求,apache 也会创建一个到后端的新 tcp 连接以接收请求。

我决定尝试直接使用 mod_proxy:

ProxyPreserveHost On
ProxyPass / http://localhost:8081/

令我惊讶的是,现在 apache 和后端之间的 tcp 连接被重新使用了(这是我最初的目标)。

这是为什么?mod_rewrite 中是否有可以配置的内容来启用 keepalive 后端连接?

(*) 后端实际上是 haproxy <-> 多个应用服务器,但我认为这里并不重要。

答案1

mod_proxy是否有连接池。mod_rewrite否。

答案2

即使通过重写进行反向代理,也使用 http keep alive,只需通过如下指令进行keepalive设置:OnProxySet

<Proxy "http://backend">
    ProxySet keepalive=On
</Proxy>

来源:https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxyset

答案3

使用一对虚拟 ProxyPass 指令,如中所述http://www.gossamer-threads.com/lists/apache/users/336740允许使用带有 RewriteRule 的连接池。

相关内容