Hello everyone,
I am having a hard time trying to reverse proxy with apache2 to my production release.
The release is running on port 4010 on a dedicated Linux box. Application works fine when using this port, websocket are also working fine.
But when I use apache2 to reverse proxy, the site appears correctly, the api calls are working too, only websocket are denied with code 403.
So I activated mod_proxy_wstunnel with
a2enmod proxy_wstunnel
and used this virtual host config
<VirtualHost *:80>
ServerAdmin koko.le.gorille@gmail.com
ServerName www.whatever.com
ProxyPreserveHost On
ProxyPass / http://0.0.0.0:4010/
ProxyPass /socket ws://0.0.0.0:4010/
ProxyPassReverse / http://0.0.0.0:4010/
ProxyPassReverse /socket ws://0.0.0.0:4010/
</VirtualHost>
In particular these lines
ProxyPass /socket ws://0.0.0.0:4010/
ProxyPassReverse /socket ws://0.0.0.0:4010/
But socket connection is still denied. I am using apache2 over nginx mainly for historical reason. Any ideas?
Thanks for taking time
2 Likes
I solved this by using nginx instead. Thanks for sample apache config.
2 Likes
Just a little side note: it does not work for the live reload socket, because that one does not use the /socket/
path, and thus falls through over HTTP. I have not found a fix for that, yet.
1 Like
I accidentally removed my solution. So here it is, again:
<VirtualHost *:80>
ServerName example.com
ErrorDocument 404 /404.html
ServerAdmin admin@example.com
ProxyPass /socket/ ws://myapp.com:8000/socket/
ProxyPassReverse /socket/ ws://myapp.com:8000/socket/
ProxyPass / http://myapp.com:8000/
ProxyPassReverse / http://myapp.com:8000/
</VirtualHost>
The example assumes your Apache reverse proxy is running on example.com
, and your application is running on myapp.com
with port 8000
published.
Just a little side note: it does not work for the live reload socket, because that one does not use the /socket/
path, and thus falls through over HTTP. I have not found a fix for that, yet.
1 Like
One of the main point is to use the domain name, IIRC. And also correct socket path 
This final configuration worked for me including live and live reload
<VirtualHost *:80>
ServerName myserver.com
RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/?(.*) "ws://localhost:4000/$1" [P,L]
ProxyPass /socket/ ws://localhost:4000/socket/
ProxyPassReverse /socket/ ws://localhost:4000/socket/
ProxyPass /live/ ws://localhost:4000/socket/
ProxyPassReverse /live/ ws://localhost:4000/socket/
ProxyPass / http://localhost:4000/
ProxyPassReverse / http://localhost:4000/
</VirtualHost>