Назад | Перейти на главную страницу

Apache mod_proxy недостаточно быстро закрывает внутренние сокеты

Я использую Apache + mod_proxy для предоставления приложения чата с Ejabberd. Он использует Bosh (XMPP через HTTP).

Проблема заключается в том, что когда пользователь закрывает свой браузер, Apache сохраняет соединение с внутренним сервером открытым некоторое время (около 1 минуты).

Меня это раздражает, потому что Эджабберд может понять, что пользователь ушел, только когда сокет закрыт ... так что собеседник пользователя не знает, что происходит в это время + собственный тайм-аут Эджабберда. Я могу изменить тайм-аут 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>