---
title: "Cara Pasang Caddy sebagai Reverse Proxy dengan HTTPS"
description: "Pasang Caddy di Ubuntu atau Debian, tulis Caddyfile untuk beberapa aplikasi di subdomain dengan HTTPS otomatis, lalu cek sertifikat dan log."
url: "https://nivelva.com/insight/pasang-caddy-reverse-proxy"
category: "Server \u0026 Infrastruktur"
tags: ["caddy","reverse proxy","https","ubuntu","ssl otomatis"]
author: "Theresia Candiawan"
published: "2026-11-07T03:32:00+07:00"
updated: "2026-11-07T03:32:00+07:00"
language: "id"
publisher: "Nivelva (https://nivelva.com)"
---

# Cara Pasang Caddy sebagai Reverse Proxy dengan HTTPS

> **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.

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](https://nivelva.com/insight/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](https://nivelva.com/insight/http3-quic-untuk-website).

### 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](https://nivelva.com/insight/kesalahan-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](https://nivelva.com/insight/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`, lalu `systemctl reload caddy`
- Log journal menunjukkan sertifikat berhasil terbit
- Folder data Caddy masuk ke backup

## Sumber

- <https://caddyserver.com/docs/install>
- <https://caddyserver.com/docs/automatic-https>
- <https://caddyserver.com/docs/running>
- <https://caddyserver.com/docs/caddyfile/options>

---

Diterbitkan oleh Nivelva Insight (https://nivelva.com/insight/). Artikel ini: https://nivelva.com/insight/pasang-caddy-reverse-proxy
Kontak Nivelva: WhatsApp https://wa.me/6285111245007, email hello@nivelva.com
