
Estoy usando Apache + mod_proxy para proporcionar una aplicación de chat con Ejabberd. Está usando Bosh (XMPP sobre HTTP).
El problema es que cuando un usuario cierra su navegador, Apache mantiene la conexión abierta con el servidor back-end durante un tiempo (aproximadamente 1 minuto).
Me molesta porque Ejabberd puede darse cuenta de que el usuario se ha ido sólo cuando el socket está cerrado... por lo que el interlocutor del usuario no sabe lo que está pasando durante ese tiempo + el propio tiempo de espera de Ejabberd. Puedo cambiar el tiempo de espera de Ejabberd, pero no pude encontrar la manera de reducir el tiempo de cierre en el lado de Apache.
Ver la salida de netstatantes de que se cierre el navegador:
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
Ydespués de cerrar el navegador, durante decenas de segundos a aproximadamente 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
Mi configuración de 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>