Apache mod_proxy não fecha soquetes de back-end com rapidez suficiente

1

Estou usando o Apache + mod_proxy para fornecer um aplicativo de bate-papo com o Ejabberd. Está usando o Bosh (XMPP sobre HTTP).

O problema é quando um usuário fecha seu navegador, o Apache mantém a conexão aberta com o servidor de back-end por um tempo (cerca de 1 minuto).

Isso me irrita porque o Ejabberd pode perceber que o usuário se foi apenas quando o socket está fechado ... então o interlocutor do usuário não sabe o que está acontecendo durante esse tempo + o próprio timeout do Ejabberd. Eu posso mudar o tempo limite de Ejabberd, mas não consegui descobrir como reduzir o tempo de fechamento no lado do Apache.

Veja a saída do netstat antes que o navegador seja fechado :

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

E após o navegador ser fechado , durante dezenas de segundos a cerca de 1 minuto ...

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

Minha configuração do 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>
    
por vcarel 08.04.2014 / 17:29

0 respostas