Je viens de déployer une application NodeJS basée sur Angular et utilisant socket.io pour communiquer entre le "front-end" et le "back-end". Dans Firefox, je voyais toutefois ce message d'erreur :
Firefox can’t establish a connection to the server at wss://my.app/socket.io/?token=verylongtoken&EIO=3&transport=websocket&sid=verylongsid
et pourtant l'application fonctionnait parfaitement.
Après enquête, il semble que socket.io avait le bon goût de faire un "fallback" sur une méthode AJAX et s'accomodait donc du non établissement du WebSocket.
Pour régler proprement le problème, il fallait :
- activer le module proxy_wstunnel d'Apache
a2enmod proxy_wstunnel service apache2 restart
- puis ajouter ces lignes dans la configuration (attention, le module rewrite d'Apache doit aussi être chargé !)
RewriteEngine On RewriteCond %{REQUEST_URI} ^/socket.io [NC] RewriteCond %{QUERY_STRING} transport=websocket [NC] RewriteRule /(.*) ws://localhost:3000/$1 [P,L]
Et hop, tout était fonctionnel désormais !