Apache mod_proxy 關閉後端套接字的速度不夠快

Apache mod_proxy 關閉後端套接字的速度不夠快

我使用 Apache + mod_proxy 來提供 Ejabberd 的聊天應用程式。它使用 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

瀏覽器關閉後,在幾十秒到一分鐘左右的時間…

瀏覽器 -> 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

我的阿帕契配置:

<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>

相關內容