kokolegorille
Websocket reverse proxy with apache2
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
Marked As Solved
m1dnight
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.
Also Liked
kokolegorille
m1dnight
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.
Last Post!
trigeek38
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>
Popular in Questions
Other popular topics
Latest Phoenix Threads
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #hex
- #security









