kieraneglin

kieraneglin

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!

Showing Posts 1 to 3

cmkarlsson

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.

rjk

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! :slight_smile:

jwoods1

jwoods1

If you want simple try Caddy server this was way easier to get started with when I compare it to Apache or Nginx

— All posts loaded —

Where Next? Top

Trending in Questions Top

Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
FlyingNoodle
If a change or preparation module uses Ash.Changeset.get_argument/2 or Ash.Query.get_argument/2 (or any of the other get_argument functio...
New
psy-q
I’m trying to set up Emacs with elixir-ls via lsp-mode and credo via Flycheck. This should mostly be preconfigured as Flycheck picks up c...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews