kieraneglin
Setting up an Elixir/Phoenix app as a reverse proxy
I’m looking to set up an Elixir/Phoenix app in front of an existing application and have this app act as a queuing system during high load events. This is probably never going to see real-world action as I’m mostly looking to learn more about this side of things.
I’ve never created an application to act as a reverse proxy but it seems like something Elixir/Erlang would handle well. Is there a recommended way to handle this? Any packages/articles to handle this would be appreciated!
Most Liked
cmkarlsson
A reverse proxy behind apache/nginx is very common. I run a couple of deployments like this where I have a phoenix application mixed in among normal php apps.
For normal HTTP/HTTPs traffic I’ve used both apache and nginx but I had problems getting apache work with websockets (I did not spend too much time on it though).
In apache you need the following configuration:
<VirtualHost *:443>
...
ProxyPass "/yourapp" http://127.0.0.1:4000/
ProxyPassReverse "/yourapp" http://127.0.0.1:4000/
...
</VirtualHost>
And you need the apache mod_proxy module (mox_proxy_http mod_proxy_wstunnel)
For nginx this can be achieved with (and this includes web sockets):
server {
...
location /yourapp {
...
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Cluster-Client-Ip $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://localhost:3000;
...
}
}
You also need to configure your phoenix endpoint (Phoenix.Endpoint — Phoenix v1.8.8)
Especially url: [host: "your.host.name", path: "/yourapp", port: 80]
The path is what you use in the ProxyPass directive and the port is the port apache/nginx is running on.
I wish I had saved the sources of this information, then you could read a bit more about it. I was certain that phoenix official documentation had a chapter on reverse proxy with nginx but couldn’t find it.
jwoods1
If you want simple try Caddy server this was way easier to get started with when I compare it to Apache or Nginx
rjk
There is a “plug” you can use (middleware for the phoenix router pipeline) which can do this for you, see: reverse_proxy_plug/README.md at master · tallarium/reverse_proxy_plug · GitHub
Have fun with it! ![]()
Popular in Questions
Other popular topics
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
- #api
- #forms
- #metaprogramming
- #security
- #hex









