Caddy Server v2 Reverse Proxy Setup Guide

Self-Hosting Nov 19, 2020

Last Updated: 07/06/2021

What is Caddy?

Caddy has a wide range of use cases including:

  • Web Server
  • Reverse Proxy
  • Sidecar Proxy
  • Load Balancer
  • API Gateway
  • Ingress Controller
  • System Manager
  • Process Supervisor
  • Task Scheduler

Today we will be installing and setting up Caddy as a Reverse Proxy. This will be on a Debian 10 system but this will also work with Ubuntu 20.

Install - Official Install Docs:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf '' | sudo apt-key add -
curl -1sLf '' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
  1. sudo apt update
  2. sudo apt install caddy

Check status: sudo systemctl status caddy
You should see something similar to this:

● caddy.service - Caddy
   Loaded: loaded (/lib/systemd/system/caddy.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-11-15 20:00:00 UTC; 2min 35s ago
 Main PID: 6969 (caddy)
    Tasks: 7 (limit: 1167)
   Memory: 15.5M
   CGroup: /system.slice/caddy.service
           └─4028 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
  1. Now head to your server's IP e.g.
    You should see:

Reverse Proxy Setup

  1. Create Caddyfile: nano Caddyfile

Use the following template: {

Basic Repsond Template: {
    repsond "Hello World!"
  1. Restart Caddy and adopt the new config
    caddy reload

Once the new config is loaded, a Let's Encrypt HTTPS certificate is automatically generated for the domain. Just make sure the A record points to the Caddy server!

Cool Fact: If Let's Encrypt is down, Caddy will automatically fall over to obtain a free HTTPS certificate form ZeroSSL.

Additional Settings

  • Load Balancing
  • Active Health Checks
  • Passive Health Checks
  • Streaming
  • Header Manipulation
  • Transport

That's it! ‌
‌Now grab a coffee ☕️

Our other Caddy Guides:

Caddy Caddyfile Advanced Setup
Our Caddy Setup Guide can be found here [/caddy-setup/]. What will be covered? * HTTP Headers [/caddy-advanced-setup/#headers] * Custom Certificates [/caddy-advanced-setup/#customsslcertificates] * Using an alternative ACME Certificate Autority [/caddy-advanced-setup/#zerosslacmesetup] (ZeroS…
How to enable Caddy HTTP Basic Authentication (basicauth) Guide
What is HTTP Basic Authentication?When visiting a website, protected with Basic Auth the browser will prompt theuser to enter a username and password before any recourses are loaded. The client will then send an Authorization header with each request to thewebsite, to maintain authentication.T…


Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.