Cara Pasang Caddy sebagai Reverse Proxy dengan HTTPS
Pasang Caddy di Ubuntu atau Debian, tulis Caddyfile untuk beberapa aplikasi di subdomain dengan HTTPS otomatis, lalu cek sertifikat dan log.
Jawaban singkat
Pasang Caddy dari repositori resmi, arahkan DNS subdomain ke server, buka port 80 dan 443, lalu tulis satu blok per subdomain berisi reverse_proxy ke port aplikasi di /etc/caddy/Caddyfile. Caddy mengurus sertifikat HTTPS dan perpanjangannya secara otomatis.
Daftar isi
- Sebelum mulai
- Langkah pemasangan
- Langkah 1. Pasang Caddy dari repositori resmi
- Langkah 2. Buka port di firewall
- Langkah 3. Pastikan aplikasi mendengar di localhost
- Langkah 4. Tulis Caddyfile
- Langkah 5. Validasi lalu muat ulang
- Langkah 6. Cek sertifikat dan log
- Langkah 7. Tambah log akses bila perlu
- Kenapa sertifikat gagal terbit?
- Pertanyaan yang sering diajukan
- Checklist singkat
Punya beberapa aplikasi di satu VPS, misalnya n8n di port 5678, dashboard di port 3000, dan API di port 8000, lalu ingin semuanya bisa dibuka lewat subdomain dengan HTTPS tanpa mengurus sertifikat satu per satu?
Caddy adalah jawaban yang ringkas untuk kebutuhan itu. Ia web server dan reverse proxy yang menerbitkan dan memperpanjang sertifikat HTTPS secara otomatis untuk setiap domain yang kamu tulis di konfigurasinya. Konfigurasi untuk satu aplikasi cukup tiga baris. Panduan ini memakai Ubuntu atau Debian, dan perintah instalasinya diambil dari dokumentasi resmi Caddy per 4 November 2026.
Sebelum mulai
Siapkan tiga hal ini, karena dokumentasi Caddy menyebutnya sebagai syarat HTTPS otomatis untuk domain publik:
- Record DNS A (dan AAAA bila server punya IPv6) untuk setiap subdomain, mengarah ke IP server, sebelum Caddy dijalankan.
- Port 80 dan 443 bisa diakses dari internet.
- Tidak ada web server lain yang sedang memakai port 80 dan 443. Bila Nginx atau Apache terpasang dan aktif, hentikan dulu atau pindahkan.
Akses root atau user dengan sudo juga dibutuhkan. Bila servermu baru, siapkan dulu dasar keamanannya lewat cara mengamankan VPS baru.
Langkah pemasangan
Langkah 1. Pasang Caddy dari repositori resmi
Perintah berikut menambahkan repositori stabil Caddy dan memasangnya:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Paket ini langsung menjalankan Caddy sebagai layanan systemd bernama caddy. Cek dengan systemctl status caddy. Membuka IP server di browser seharusnya menampilkan halaman sambutan Caddy.
Langkah 2. Buka port di firewall
Bila memakai UFW:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
Baris terakhir untuk HTTP/3. Opsi protocols di Caddy secara default bernilai h1 h2 h3, jadi HTTP/3 langsung aktif bila UDP 443 terbuka. Penjelasannya ada di HTTP/3 dan QUIC.
Langkah 3. Pastikan aplikasi mendengar di localhost
Setiap aplikasi sebaiknya hanya bisa diakses dari dalam server, misalnya 127.0.0.1:5678, dan pengunjung masuk lewat Caddy. Cek dengan:
sudo ss -tlpn
Bila aplikasimu berjalan di Docker, publikasikan portnya ke localhost saja, misalnya "127.0.0.1:5678:5678". Kalau tidak, port itu bisa tetap terbuka ke internet walau firewall menolaknya. Alasannya dibahas di kesalahan umum Docker di produksi.
Langkah 4. Tulis Caddyfile
Buka /etc/caddy/Caddyfile, hapus isi contohnya, lalu tulis satu blok per subdomain:
{
email admin@domainmu.com
}
n8n.domainmu.com {
reverse_proxy localhost:5678
}
dashboard.domainmu.com {
reverse_proxy localhost:3000
}
api.domainmu.com {
encode gzip
reverse_proxy localhost:8000
}
Blok paling atas adalah opsi global. Alamat email dipakai Caddy saat membuat akun ACME di penerbit sertifikat, agar kamu bisa dihubungi bila ada masalah sertifikat. Dokumentasi menyarankan mengisinya.
Setiap blok berikutnya berarti: untuk domain ini, terbitkan sertifikat, dan teruskan semua permintaan ke port aplikasi. Caddy juga otomatis mengalihkan HTTP ke HTTPS, jadi kamu tidak perlu menulis aturan redirect.
Langkah 5. Validasi lalu muat ulang
Rapikan format dan periksa kesalahan sebelum dipakai:
sudo caddy fmt --overwrite /etc/caddy/Caddyfile
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
reload menerapkan konfigurasi baru dengan mulus tanpa memutus koneksi yang sedang berjalan. Bila validasi gagal, Caddy menyebutkan baris yang bermasalah.
Langkah 6. Cek sertifikat dan log
Begitu konfigurasi dimuat, Caddy meminta sertifikat untuk setiap domain di Caddyfile ke Let's Encrypt, dan bila gagal mencoba ZeroSSL. Pantau prosesnya:
journalctl -u caddy --no-pager | less +G
Cari baris yang menyatakan sertifikat untuk domainmu berhasil diperoleh, atau pesan error bila gagal. Lalu buka https://n8n.domainmu.com di browser dan klik ikon gembok untuk melihat penerbit dan masa berlakunya. Dari terminal, curl -I https://n8n.domainmu.com harus menjawab tanpa error sertifikat.
Sertifikat dan data lain disimpan di /var/lib/caddy/.local/share/caddy. Folder ini harus tetap ada dan bisa ditulis, jadi ikutkan dalam backup bila kamu memindahkan server.
Langkah 7. Tambah log akses bila perlu
Secara default Caddy tidak menulis log akses per situs. Tambahkan direktif log di blok yang ingin dicatat:
api.domainmu.com {
log {
output file /var/log/caddy/api.log
}
reverse_proxy localhost:8000
}
Pastikan folder /var/log/caddy ada dan bisa ditulis oleh user caddy.
Kenapa sertifikat gagal terbit?
Hampir selalu salah satu dari ini:
| Gejala di log | Penyebab umum | Perbaikan |
|---|---|---|
| Timeout atau connection refused saat validasi | Port 80 atau 443 tertutup | Buka di firewall server dan firewall penyedia |
| DNS problem, NXDOMAIN | Record DNS belum ada atau belum menyebar | Cek dengan dig +short subdomain |
| Domain mengarah ke IP lain | Record A salah, atau AAAA lama masih ada | Perbaiki record, hapus AAAA yang keliru |
| Address already in use | Nginx atau Apache masih memakai port | Hentikan layanan lain |
| Rate limit | Terlalu banyak percobaan gagal berturut-turut | Perbaiki penyebab, tunggu, lalu ulangi |
Untuk memahami record DNS yang dipakai, lihat apa itu DNS.
Pertanyaan yang sering diajukan
Apakah Caddy bisa dipakai bersama Nginx di server yang sama?
Bisa, asalkan hanya satu yang memakai port 80 dan 443. Pola umumnya Caddy di depan sebagai reverse proxy, dan Nginx berjalan di port lokal lain di belakangnya.
Apakah WebSocket perlu konfigurasi khusus?
Umumnya tidak. reverse_proxy di Caddy meneruskan koneksi WebSocket tanpa pengaturan tambahan, sehingga aplikasi seperti n8n atau dashboard real-time biasanya langsung berjalan.
Bagaimana aplikasi tahu IP asli pengunjung?
Caddy mengirim header X-Forwarded-For dan X-Forwarded-Proto ke aplikasi. Beberapa aplikasi perlu diatur agar memercayai proxy dari localhost sebelum membaca header itu.
Apakah perlu memperpanjang sertifikat secara manual?
Tidak. Caddy memperpanjang sertifikat sendiri sebelum kedaluwarsa selama Caddy terus berjalan, DNS tetap mengarah ke server, dan port tetap terbuka.
Bisakah memakai domain utama dan www sekaligus?
Bisa. Tulis keduanya di alamat blok, dipisah koma, misalnya domainmu.com, www.domainmu.com { ... }. Caddy menerbitkan sertifikat untuk keduanya.
Checklist singkat
- Record DNS setiap subdomain mengarah ke IP server
- Port 80/tcp, 443/tcp, dan 443/udp terbuka
- Aplikasi hanya mendengar di localhost
- Caddyfile lolos
caddy validate, lalusystemctl reload caddy - Log journal menunjukkan sertifikat berhasil terbit
- Folder data Caddy masuk ke backup


