WebSockets and Apache proxy: how to configure mod_proxy_wstunnel?
apache, node.js, proxy, socket.io, websocket
Solution
I finally managed to do it, thanks to this topic. TODO:
1) Have Apache 2.4 installed (doesn't work with 2.2), and do:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel
2) Have `nodejs` running on port 3001
3) Do this in the Apache config
<VirtualHost *:80>
ServerName example.com
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:3001/$1 [P,L]
ProxyPass / http://localhost:3001/
ProxyPassReverse / http://localhost:3001/
</VirtualHost>
Note: if you have more than one service on the same server that uses websockets, you might want to do this to separate them.
Problem
I have : Apache 2.4 on port 80 of my server, with mod_proxy and mod_proxy_wstunnel enabled Node.js + `socket.io` on port 3001 of the same server Accessing `example.com` (with port 80) redirects to 2. thanks to this method with the following Apache configuration: ``` <VirtualHost *:80> ServerName example.com ProxyPass / http://localhost:3001/ ProxyPassReverse / http://localhost:3001/ ProxyPass / ws://localhost:3001/ ProxyPassReverse / ws://localhost:3001/ </VirtualHost> ``` It works for everything, except the WebSocket part : `ws://...` are not transmitted like it should by the proxy. When I access the page on `example.com`, I have: ``` Impossible to connect ws://example.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN. ``` Question: How to make Apache proxy the WebSockets as well?