Apache-2.2

mod_rewrite+proxy 關閉到後端的連接(keepalive)

  • October 1, 2018

我們有一個相當典型的設置:客戶端 <-> apache2 (2.2.22) <-> 後端 (*)。

最初我們使用 mod_rewrite 和

$$ P $$最簡單形式的標誌:

&lt;VirtualHost *:80&gt;
 RewriteEngine On
 ProxyPreserveHost On
 RewriteRule ^(.*)$ http://localhost:8081$1 [P,L]
&lt;/VirtualHost&gt;

然而,使用這種設置,即使客戶端使用保持活動連接並使用一個 tcp 連接向 apache 發送多個 http 請求,apache 也會為到達請求創建一個到後端的新 tcp 連接。

我決定嘗試直接使用 mod_proxy:

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

令我驚訝的是,現在 apache 和後端之間的 tcp 連接被重新使用(這是我最初的目標)。

這是為什麼?mod_rewrite 中有什麼東西可以配置來啟用keepalive後端連接嗎?

(*) 後端實際上是 haproxy <-> 多個應用伺服器,但我認為這並不重要。

mod_proxy做連接池。mod_rewrite沒有。

即使您通過重寫進行反向代理,您也可以使用 http keep alive,您只需要通過如下指令設置keepalive為:On``ProxySet

&lt;Proxy "http://backend"&gt;
   ProxySet keepalive=On
&lt;/Proxy&gt;

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

引用自:https://serverfault.com/questions/423821