Apache mod_proxy가 백엔드 소켓을 충분히 빨리 닫지 않음

Apache mod_proxy가 백엔드 소켓을 충분히 빨리 닫지 않음

나는 Ejabberd와 함께 채팅 애플리케이션을 제공하기 위해 Apache + mod_proxy를 사용하고 있습니다. 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

그리고브라우저를 닫은 후, 수십초에서 약 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

내 아파치 구성 :

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

관련 정보