sreyansjain
Caddy Server as a reverse proxy for Phoenix Applications
Caddy is fantastic little production ready server that we can use instead of Apache or Nginx reverse proxy in front of multiple phoenix applications in one box.
The best thing is that we get https without needing to do anything on phoenix side. Caddy automatically provisions a certificate from Let’s encrypt.
All we need to do is just write one line of code.
Some important commands
sudo caddy start
sudo caddy stop
sudo caddy reload
Concept
We need to have a file Caddyfile (no extension) in the directory from where we would start the caddy server.
Say we have Caddyfile in the home directory - /home/sher
This is the content of the Caddyfile -
use.example.app {
reverse_proxy * http://localhost:6001
}
test.example.app {
reverse_proxy * http://localhost:8066
}
example.app {
reverse_proxy * http://localhost:8000
}
another-site.com {
reverse_proxy * http://localhost:4002
}
So we just need to write one line for each domain and our job is done.
Please note
test.example.app {
reverse_proxy * http://localhost:8066
}
Here the phoenix app is still running in localhost but the final url would be https://test.example.app. This happens by magic. So you don’t need to do anything and https should automatically work.
This automatically gives you HTTP/2 which is faster than HTTP/1.1.
My Use case
I run a software development agency and we have several projects running in one box, so Caddy really helps there.
More advanced stuff is also possible. Check out the docs.
I found Caddy really interesting and thought that I should share it with the community.
P.S: I am not associated with Caddy in any way
Most Liked
rasputin303
I’m using Caddy as a reverse proxy for Phoenix too! I spent a weekend trying and failing to understand Nginx configs, Docker and so on, and eventually gave up. Then I found Caddy and all the SSL/LetsEncrypt stuff just works out of the box.
carterbryden
I love Caddy!
I’ve been building a small SAAS app with Elixir & Phoenix that makes heavy use of Caddy V2 and it’s been amazing to use. The app is an API for other apps that want to let their users connect custom domains or spin up subdomains on the fly. Each of my users gets their own dedicated Caddy instances that my app manages, and it’s worked flawlessly.
I’d really recommend checking out the JSON API as well as an alternative to using a Caddyfile. V2 has an admin API you can use to make updates while it’s running. Can’t recommend it enough.
Caddy is also built mostly by one person, Matt Holt, who can always use new sponsors on GitHub, if it’s working well for you
. Great project to support.
Exadra37
You also have the library site_encrypt from @sasajuric.
I am using Traefik for the same propose because I deploy with Docker.
If not in mistake Traefik uses Caddy under the hood.
Popular in Discussions
Other popular topics
Latest Phoenix Threads
Chat & Discussions>Discussions
Latest on Elixir Forum
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









