Caddy Reverse Proxy: Setup Cepat, HTTPS Otomatis, Anti Ribet

Aplikasi sudah berjalan di VPS, tetapi masih harus diakses lewat port seperti :3000 atau :8080? Kamu bisa menggunakan Caddy sebagai reverse proxy agar aplikasi dapat diakses melalui subdomain sendiri dengan koneksi HTTPS. Setup-nya sederhana, bahkan sertifikat SSL bisa diurus otomatis tanpa konfigurasi manual yang rumit.
Apa Itu Caddy Reverse Proxy?
Caddy adalah web server open source yang dikenal karena fitur automatic HTTPS dan konfigurasi yang relatif sederhana. Selain melayani konten website, Caddy juga bisa bertindak sebagai reverse proxy untuk meneruskan permintaan pengunjung ke aplikasi backend yang berjalan di server, Docker container, atau layanan internal lainnya.
Reverse proxy sendiri adalah server perantara yang menerima permintaan dari pengunjung sebelum meneruskannya ke server aplikasi yang sebenarnya.
Baca Juga: Laravel Butuh SSL? Ini 4 Fitur yang Bermasalah Tanpa HTTPS
Bayangkan Caddy seperti resepsionis di sebuah kantor. Pengunjung cukup menyebutkan tujuan kedatangannya. Resepsionis kemudian mengarahkan pengunjung ke ruangan yang tepat tanpa perlu mengetahui tata letak seluruh kantor.
Perlu dibedakan juga antara forward proxy dan reverse proxy. Forward proxy bertindak mewakili pengguna ketika mengakses internet, sedangkan reverse proxy berada di sisi server dan mewakili aplikasi backend saat menerima permintaan dari pengunjung.
Baca Juga: Panduan Proxy DuckDuckGo: Definisi, Jenis & Cara Setting
Cara Kerja Caddy sebagai Reverse Proxy

Secara sederhana, alur reverse proxy menggunakan Caddy terdiri dari dua jalur koneksi:
- Browser pengunjung terhubung ke Caddy melalui HTTPS.
- Caddy memeriksa aturan routing berdasarkan domain atau path yang diakses.
- Caddy meneruskan permintaan ke aplikasi backend melalui alamat internal.
- Backend memproses permintaan dan mengirimkan respons kembali melalui Caddy.
- Caddy mengirimkan hasilnya kepada browser pengunjung.
Gambaran sederhananya seperti ini:
Pengunjung (Browser)
|
| HTTPS :443
v
CADDY SERVER
- SSL/TLS
- Routing
- Reverse Proxy
|
| HTTP / HTTPS
v
BACKEND APPLICATION
localhost:3000
|
v
Respons ke BrowserAda beberapa hal teknis yang membuat proses ini praktis.
Pertama, HTTPS otomatis. Ketika Caddy menemukan nama domain pada konfigurasi Caddyfile, Caddy dapat meminta sertifikat TLS dari penyedia seperti Let’s Encrypt atau ZeroSSL. Sertifikat tersebut juga diperbarui otomatis selama persyaratan validasi terpenuhi.
Kedua, forwarding header. Caddy otomatis menangani header standar seperti X-Forwarded-For, X-Forwarded-Proto, dan X-Forwarded-Host. Informasi ini membantu aplikasi backend mengenali IP pengunjung dan protokol koneksi aslinya.
Ketiga, dukungan WebSocket. Aplikasi realtime seperti live chat, dashboard interaktif, dan notifikasi dapat menggunakan WebSocket tanpa konfigurasi upgrade koneksi yang rumit.
Agar HTTPS otomatis berjalan, kamu membutuhkan domain publik, DNS yang mengarah ke IP server, serta port TCP 80 dan 443 yang dapat diakses dari internet.
Kelebihan Caddy sebagai Reverse Proxy
Mengapa memilih Caddy dibandingkan mengatur reverse proxy secara manual? Berikut beberapa kelebihan Caddy yang cukup terasa dalam penggunaan sehari-hari.
- HTTPS otomatis: Caddy mengurus penerbitan dan pembaruan sertifikat SSL/TLS. Kamu tidak perlu membuat cron job khusus untuk memperpanjang sertifikat.
- Konfigurasi sederhana: Caddyfile menggunakan sintaks yang mudah dibaca. Bahkan konfigurasi dasar reverse proxy bisa ditulis hanya dalam dua baris.
- Setup cepat: Cocok untuk developer independen dan bisnis kecil yang ingin memublikasikan aplikasi tanpa menghabiskan banyak waktu mengatur server.
- Mendukung WebSocket dan load balancing: Caddy bisa meneruskan koneksi realtime sekaligus membagi trafik ke beberapa backend.
- Fleksibel: Caddy dapat dijalankan langsung di VPS, melalui Docker, maupun di lingkungan homelab tertentu seperti OPNsense menggunakan plugin yang sesuai.
- Dukungan protokol modern: HTTP/2 dan HTTP/3 tersedia untuk mendukung komunikasi web yang lebih modern.
Selain itu, Caddy mendukung validasi konfigurasi dan reload tanpa harus menghentikan seluruh layanan. Ini membantu mengurangi risiko downtime ketika kamu melakukan perubahan aturan routing.
Kekurangan Caddy yang Perlu Kamu Tahu
Meski menawarkan banyak kemudahan, Caddy bukan solusi yang selalu cocok untuk semua kebutuhan.
Beberapa keterbatasannya antara lain:
- Ketergantungan pada port publik: Validasi sertifikat otomatis melalui HTTP-01 atau TLS-ALPN-01 membutuhkan akses ke port 80 atau 443. Jika port tersebut tidak bisa dibuka, kamu perlu menggunakan DNS challenge dengan plugin yang sesuai.
- Ekosistem lebih kecil: Dokumentasi komunitas, tutorial lama, dan pilihan plugin Caddy belum sebanyak Nginx atau Apache.
- Tidak otomatis membaca label Docker: Berbeda dengan Traefik, Caddy tidak secara native mendeteksi container berdasarkan Docker label. Kamu perlu mengatur routing sendiri atau menggunakan proyek tambahan.
- Middleware tidak terpusat secara otomatis: Jika membutuhkan autentikasi tambahan seperti Authelia, kamu perlu mengintegrasikan dan mengatur penerapannya pada konfigurasi site.
- Performa ekstrem perlu diuji: Untuk kebutuhan concurrency sangat tinggi atau streaming file besar, Nginx bisa menjadi alternatif yang layak dibandingkan Caddy. Pemilihannya tetap perlu mempertimbangkan hasil benchmark sesuai beban aplikasi.
Dengan memahami batasan tersebut, kamu bisa menentukan apakah Caddy sudah cukup untuk kebutuhan infrastruktur yang sedang dibangun.
Cara Menggunakan Caddy sebagai Reverse Proxy
Setelah memahami cara kerjanya, sekarang saatnya mencoba Caddy di self-host VPS. Kita akan menggunakan contoh aplikasi backend yang berjalan di port 3000 dan ingin diakses melalui app.example.com.
Langkah 1: Persiapkan Backend, DNS, dan Firewall
Pastikan aplikasi backend sudah berjalan. Cek koneksinya melalui terminal VPS:
curl http://127.0.0.1:3000Selanjutnya, pastikan Caddy sudah terinstal dengan mengecek versinya:
caddy version
Sebelum konfigurasi, siapkan beberapa hal berikut:
- Buat DNS A record yang mengarah ke IP publik VPS. Tambahkan AAAA record jika menggunakan IPv6.
- Pastikan domain sudah mengarah ke server yang benar.
- Buka port TCP 80 dan 443 pada firewall VPS agar validasi sertifikat HTTPS dapat berjalan.
Langkah 2: Buat Konfigurasi Caddyfile
Buka Caddyfile, lalu tambahkan konfigurasi berikut:
app.example.com {
reverse_proxy 127.0.0.1:3000
}Baris pertama menentukan domain yang akan digunakan, sedangkan reverse_proxy meneruskan permintaan ke aplikasi pada port 3000.
Inilah salah satu kelebihan Caddy: cukup menggunakan nama domain dan satu directive reverse proxy, HTTPS otomatis bisa diaktifkan tanpa mengatur sertifikat secara manual.
Langkah 3: Uji Konfigurasi Tanpa HTTPS
Saat masih bereksperimen, gunakan HTTP lokal agar tidak berulang kali meminta sertifikat dan berisiko terkena rate limit:
http://localhost:8080 {
reverse_proxy 127.0.0.1:3000
}Uji dengan curl http://localhost:8080. Jika berhasil, lanjutkan ke konfigurasi domain publik.
Langkah 4: Atur Beberapa Aplikasi dan Docker
Untuk beberapa aplikasi, kamu bisa memakai subdomain berbeda:
app.example.com {
reverse_proxy 127.0.0.1:3000
}
vault.example.com {
reverse_proxy 127.0.0.1:8080
}Jika ingin menggunakan subfolder, pilih handle_path untuk menghapus prefix URL atau handle untuk mempertahankannya. Pastikan aplikasi mendukung base path agar aset seperti CSS dan JavaScript tidak mengalami 404.
Khusus Docker, tempatkan Caddy dan aplikasi dalam satu Docker network. Gunakan nama service sebagai alamat backend:
app.example.com {
reverse_proxy app:3000
}Jangan menggunakan 127.0.0.1 karena alamat tersebut merujuk ke container Caddy sendiri.
Langkah 5: Validasi dan Reload Konfigurasi
Sebelum menerapkan perubahan, validasi Caddyfile:
caddy adapt --config /etc/caddy/Caddyfile --validateJika valid, reload konfigurasi:
caddy reload --config /etc/caddy/CaddyfilePantau log untuk memastikan tidak ada error. Jika ingin pengujian lebih cepat, gunakan CLI:
caddy reverse-proxy --from :2080 --to :9000Tips Praktis Menggunakan Caddy sebagai Reverse Proxy

Agar reverse proxy tetap stabil ketika aplikasi mulai digunakan banyak orang, perhatikan beberapa hal berikut:
- Jangan menambahkan header standar secara manual. Caddy sudah mengatur forwarding header yang umum dibutuhkan backend.
- Atur trusted_proxies jika menggunakan CDN. Jika Cloudflare berada di depan Caddy, konfigurasikan IP range proxy tepercaya agar alamat IP pengunjung asli dapat dikenali dengan benar.
- Hindari tls_insecure_skip_verify di produksi. Menonaktifkan verifikasi sertifikat upstream dapat membuka risiko koneksi ke server yang tidak tepercaya.
- Gunakan health check untuk beberapa backend. Directive health_uri membantu Caddy memeriksa kondisi aplikasi sebelum mengirimkan trafik.
- Validasi sebelum reload. Kebiasaan ini membantu mencegah kesalahan konfigurasi mengganggu layanan yang sedang berjalan.
- Pertimbangkan DNS challenge. Jika port 80/443 tidak dapat dibuka atau kamu membutuhkan wildcard certificate, gunakan DNS challenge dengan plugin DNS yang sesuai.
- Mulai dari Caddyfile. Gunakan konfigurasi JSON atau API ketika kebutuhan deployment sudah berkembang dan konfigurasi perlu dibuat secara otomatis melalui script.
Untuk kebutuhan load balancing, misalnya kamu memiliki dua instance API, Caddy juga bisa membagi permintaan ke beberapa backend:
api.example.com {
reverse_proxy 10.0.0.11:8080 10.0.0.12:8080 {
health_uri /healthz
}
}Pastikan endpoint /healthz benar-benar tersedia dan mengembalikan respons HTTP 2xx. Dengan begitu, Caddy dapat memeriksa kesehatan backend dan membantu menghindari instance yang bermasalah.
Kesimpulan
Caddy bisa menjadi solusi praktis untuk mengelola reverse proxy tanpa konfigurasi server yang rumit. Dengan Caddyfile yang sederhana, kamu bisa mengarahkan beberapa aplikasi ke domain berbeda, mengaktifkan HTTPS otomatis, hingga mengatur load balancing untuk beberapa backend. Cocok untuk developer independen maupun bisnis kecil yang ingin mengelola aplikasi secara lebih efisien.
Namun, penggunaan Caddy membutuhkan server yang bisa dikonfigurasi secara mandiri. Kamu perlu menginstalnya sendiri, memiliki akses root, serta memastikan port 80 dan 443 terbuka agar penerbitan sertifikat HTTPS berjalan lancar.
Untuk kebutuhan tersebut, VPS Murah dari IDwebhost bisa menjadi pilihan. Kamu lebih leluasa mengelola server, memasang Caddy, menjalankan Docker, dan menyesuaikan konfigurasi sesuai kebutuhan aplikasi.
