Apache reverse proxy configuration for socket.io
sudo a2enmod proxy_http sudo a2enmod proxy_fcgi sudo a2enmod proxy_wstunnel
# VirtualHost ms.example.net <VirtualHost *:80> ServerName ms.example.net ProxyRequests Off ProxyPreserveHost On RemoteIPHeader X-Forwarded-For <Proxy *> Order deny,allow Allow from all </Proxy> RewriteEngine On RewriteCond %{REQUEST_URI} ^/socket.io [NC] RewriteCond %{QUERY_STRING} transport=websocket [NC] RewriteRule /(.*) ws://localhost:14102/$1 [P,L] ProxyPass /socket.io http://localhost:14102/socket.io ProxyPassReverse /socket.io http://localhost:14102/socket.io </VirtualHost> <VirtualHost *:443> ServerName ms.example.net ProxyRequests Off ProxyPreserveHost On RemoteIPHeader X-Forwarded-For RewriteEngine on <Proxy *> Order deny,allow Allow from all </Proxy> SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.net/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.net/privkey.pem RewriteEngine On RewriteCond %{REQUEST_URI} ^/socket.io [NC] RewriteCond %{QUERY_STRING} transport=websocket [NC] RewriteRule /(.*) ws://localhost:14102/$1 [P,L] ProxyPass /socket.io http://localhost:14102/socket.io ProxyPassReverse /socket.io http://localhost:14102/socket.io </VirtualHost>
Use a secure URL for your initial connection, i.e. instead of “http://” use “https://”. If the WebSocket transport is chosen, then Socket.IO should automatically use “wss://” (SSL) for the WebSocket connection too.
var socket = io.connect('https://localhost', {secure: true});
References
http://xpo6.com/socket-io-via-apache-reverse-proxy/
https://stackoverflow.com/questions/36472920/apache-proxy-configuration-for-socket-io-project-not-in-root
https://gist.github.com/iacchus/954e0787d6893c5ab8e1
https://stackoverflow.com/questions/6599470/node-js-socket-io-with-ssl