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>
Tags ejabberd apache-2.2 mod-proxy