Apache mod_proxy 关闭后端套接字的速度不够快

Apache mod_proxy 关闭后端套接字的速度不够快

我使用 Apache + mod_proxy 为 Ejabberd 提供聊天应用程序。它使用 Bosh(基于 HTTP 的 XMPP)。

问题是,当用户关闭浏览器时,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

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

相关内容