web-dev-qa-db-ja.com

mod_rewrite + proxyはバックエンドへの接続を閉じます(キープアライブ)

かなり典型的なセットアップがあります:クライアント<-> Apache2(2.2.22)<->バックエンド(*)。

最初は、最も単純な形式で[P]フラグを指定してmod_rewriteを使用していました。

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

ただし、この設定を使用すると、クライアントがキープアライブ接続を使用し、Apacheへの1つのtcp接続を使用して複数のhttp要求を送信していた場合でも、Apacheはリーチ要求のためにバックエンドへの新しいtcp接続を作成していました。

代わりに、mod_proxyを直接使用してみることにしました。

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

そして驚いたことに、Apacheとバックエンド間のtcp接続が再利用されました(これが私の最初の目標でした)。

何故ですか?キープアライブバックエンド接続を有効にするように構成するmod_rewriteに何かがありますか?

(*)バックエンドは実際にはhaproxy <->複数のアプリサーバーですが、ここでは重要ではないと思います。

1
adamw

mod_proxy接続プーリングを行います。 mod_rewriteしません。

4
Ansgar Wiechers

書き換えによってリバースプロキシを実行する場合でも、canはhttp keep aliveを使用できます。次のように、keepaliveディレクティブを介してOnProxySetに設定する必要があります。

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

ソース: https://httpd.Apache.org/docs/2.4/mod/mod_proxy.html#proxyset

0

http://www.gossamer-threads.com/lists/Apache/users/33674 で説明されているように、ダミーのProxyPassディレクティブのペアを使用すると、RewriteRuleで接続プールを使用できます。

0
Havenless