In addition to mod_proxy, mod_proxy_wstunnel must be enabled. Without it, websocket requests won't get proxied.
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
Current vhost config on my mac for praxis2 app and web conferencing app:
<VirtualHost *:443>
ServerName praxis2.moka.net
ServerAdmin paul.h.monk@gmail.com
# SSL
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile "/Users/moka/work/jibc/praxis/praxis2/2_0_0/ssl/praxis2.moka.net.crt"
SSLCertificateKeyFile "/Users/moka/work/jibc/praxis/praxis2/2_0_0/ssl/praxis2.moka.net.key"
# SSLCertificateChainFile "/Applications/XAMPP/xamppfiles/etc/ssl.crt/server.crt"
<Proxy *>
Require all granted
</Proxy>
#<Proxy *>
#Order deny,allow
#Allow from all
#</Proxy>
ProxyRequests Off
ProxyVia on
# http requests
ProxyPass / http://localhost:1337/
ProxyPassReverse / http://localhost:1337/
# wss to ws
ProxyPassMatch ^/(.*)/socket.io ws://localhost:1337/$1/socket.io
ProxyPass /socket.io/ ws://localhost:1337/socket.io
ProxyPassReverse /socket.io/ ws://localhost:1337/socket.io
# for websocket requests
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:1337/$1 [P,L]
#RewriteCond %{QUERY_STRING} transport=polling
#RewriteRule /(.*)$ http://localhost:1337/$1 [P]
ErrorLog "/Users/moka/work/jibc/praxis/praxis2/2_0_0/logs/www_error.log"
CustomLog "/Users/moka/work/jibc/praxis/praxis2/2_0_0/logs/www_access.log" common
</VirtualHost>
<VirtualHost *:443>
ServerName easyrtc.moka.net
ServerAdmin paul.h.monk@gmail.com
Header set Access-Control-Allow-Origin "https://praxis2.moka.net"
Header set Access-Control-Allow-Credentials "true"
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
ProxyRequests Off
ProxyVia on
ProxyPass / http://localhost:1338/
ProxyPassReverse / http://localhost:1338/
# wss to ws
ProxyPassMatch ^/(.*)/socket.io ws://localhost:1338/$1/socket.io
ProxyPass /socket.io/ ws://localhost:1338/socket.io
ProxyPassReverse /socket.io/ ws://localhost:1338/socket.io
<Proxy *>
#Order deny,allow
#Allow from all
Require all granted
</Proxy>
# for websocket requests
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:1338/$1 [P,L]
RewriteCond %{QUERY_STRING} transport=polling
RewriteRule /(.*)$ http://localhost:1338/$1 [P]
# SSL
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile "/Users/moka/work/jibc/praxis/praxis2/2_0_0/ssl/easyrtc.moka.net.crt"
SSLCertificateKeyFile "/Users/moka/work/jibc/praxis/praxis2/2_0_0/ssl/easyrtc.moka.net.key"
# SSLCertificateChainFile "/Applications/XAMPP/xamppfiles/etc/ssl.crt/server.crt"
ErrorLog "/Users/moka/work/jibc/praxis/praxis2/2_0_0/logs/easyrtc_error.log"
CustomLog "/Users/moka/work/jibc/praxis/praxis2/2_0_0/logs/easyrtc_access.log" common
</VirtualHost>