Apache mod_proxy schließt Back-End-Sockets nicht schnell genug

Apache mod_proxy schließt Back-End-Sockets nicht schnell genug

Ich verwende Apache + mod_proxy, um eine Chat-Anwendung mit Ejabberd bereitzustellen. Es verwendet Bosh (XMPP über HTTP).

Das Problem besteht darin, dass Apache die Verbindung zum Back-End-Server für eine Weile (ca. 1 Minute) aufrechterhält, wenn ein Benutzer seinen Browser schließt.

Es ärgert mich, weil Ejabberd erst dann erkennen kann, dass der Benutzer weg ist, wenn der Socket geschlossen wird. Der Gesprächspartner des Benutzers weiß also nicht, was während dieser Zeit passiert + Ejabberds eigenes Timeout. Ich kann Ejabberds Timeout ändern, aber ich konnte nicht herausfinden, wie ich die Schließzeit auf der Apache-Seite verkürzen kann.


Siehe netstats Ausgabebevor der Browser geschlossen wird:

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

Undnach dem Schließen des Browsers, während Dutzenden von Sekunden bis etwa einer Minute ...

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

Meine Apache-Konfiguration:

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

verwandte Informationen