Comment connecter socket.io via un proxy inverse

J’essaie de me connecter à un serveur socket.io derrière un proxy inverse apache. J’ai Apache en cours d’exécution sur le port 8888. Le serveur nodejs s’exécute sur le même ordinateur sur le port 9096. Pour tester le proxy est configuré sur mon ordinateur local comme ceci:

ProxyPass /some/path http://localhost:9096 ProxyPassReverse /some/path http://localhost:9096 

Dans le code client, je fais quelque chose comme ceci:

 var socketUrl = 'http://localhost:8888/some/path/namespace'; var socket = io.connect(socketUrl); 

Cela se traduit par le comportement suivant.

Tout d’abord, mon client demande le script socket.io.js à:

 http://localhost:8888/some/path/socket.io/socket.io.js -> 200 ok 

Ensuite, le socket tente de se connecter à:

 localhost:8888/socket.io/1?123983759 -> 404 not found 

J’ai trouvé la configuration “resource” pour socket.io, mais cela semble seulement définir à partir de laquelle le script socket.io.js est extrait, mais pas l’URL à laquelle il tente de se connecter. Il semble toujours se connecter à la racine de l’origine du client.

Comment pourrais-je le faire se connecter à localhost: 8888 / some / path / socket.io / 1? 123983759

?

Dans votre code client, vous devez définir le chemin de base avec l’option resource, comme ceci:

 var socket = io.connect('http://localhost:8888', {resource: '/some/path/socket.io'}); 

J’ai eu ce problème moi-même. L’exemple de YED montre encore une solution qui se connecte directement aux nœudsJ et non via le proxy inverse.

Normalement, vous souhaitez que index.html se connecte via le proxy inverse Apache et non directement. Un exemple est fourni sur Socket.io via Apache Reverse Proxy

fondamentalement, vous devez également activer proxy_wstunnel et append ce qui suit à la configuration de votre hôte virtuel

 RewriteCond %{REQUEST_URI} ^/socket.io [NC] RewriteCond %{QUERY_STRING} transport=websocket [NC] RewriteRule /(.*) ws://dev-ip-machine:8001/$1 [P,L] ProxyPass /chat http://dev-ip-machine:8001 ProxyPassReverse /chat http://dev-ip-machine:8001 ProxyPass /socket.io http://dev-ip-machine:8001/socket.io ProxyPassReverse /socket.io http://dev-ip-machine:8001/socket.io