Apache mod_proxy がバックエンド ソケットを十分な速さで閉じない

Apache mod_proxy がバックエンド ソケットを十分な速さで閉じない

Ejabberd でチャット アプリケーションを提供するために、Apache + mod_proxy を使用しています。Bosh (XMPP over HTTP) を使用しています。

問題は、ユーザーがブラウザを閉じると、Apache がバックエンド サーバーとの接続をしばらく (約 1 分間) 開いたままにすることです。

Ejabberd はソケットが閉じられたときにのみユーザーがいなくなったことを認識できるため、ユーザーの対話相手はその間何が起こっているのかわかりません。さらに Ejabberd 自身のタイムアウトもあります。Ejabberd のタイムアウトは変更できますが、Apache 側でクローズ時間を短縮する方法がわかりません。


netstatの出力を見るブラウザを閉じる前に:

ブラウザ -> Apache mod_proxy

tcp        0      0 127.0.1.1:80            127.0.0.1:52361         TIME_WAIT
tcp        0      0 127.0.1.1:80            127.0.0.1:52380         ESTABLISHED
tcp        0      0 127.0.0.1:52380         127.0.1.1:80            ESTABLISHED

Apache mod_proxy -> Ejabberd

tcp        0      0 0.0.0.0:5280            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:5280          127.0.0.1:40972         ESTABLISHED
tcp        0      0 127.0.0.1:40953         127.0.0.1:5280          TIME_WAIT
tcp        0      0 127.0.0.1:40972         127.0.0.1:5280          ESTABLISHED

そしてブラウザを閉じた後、数十秒から1分程度の間に…

ブラウザ -> Apache mod_proxy

tcp        0      0 127.0.1.1:80            127.0.0.1:52361         TIME_WAIT
tcp        1      0 127.0.1.1:80            127.0.0.1:52380         CLOSE_WAIT
tcp        0      0 127.0.0.1:52380         127.0.1.1:80            FIN_WAIT2

Apache mod_proxy -> Ejabberd

tcp        0      0 0.0.0.0:5280            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:5280          127.0.0.1:40972         ESTABLISHED
tcp        0      0 127.0.0.1:40953         127.0.0.1:5280          TIME_WAIT
tcp        0      0 127.0.0.1:40972         127.0.0.1:5280          ESTABLISHED

私のApache設定:

<VirtualHost *:80>
    ProxyRequests On
    ProxyPass /http-bind/ http://localhost:5280/http-bind/

    ServerName desktop
    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    RewriteEngine Off

    [...]
</VirtualHost>

関連情報