Traefik vs Nginx: Memilih Reverse Proxy yang Tepat untuk VPS Anda
Masalah yang Sama, Dua Pendekatan Berbeda
Begitu Anda menjalankan lebih dari satu layanan di satu VPS — misalnya blog, panel monitoring, dan aplikasi kecil — Anda butuh satu pintu depan. Reverse proxy menerima semua request di port 80/443, lalu meneruskannya ke layanan yang tepat berdasarkan domain.
Nginx melakukan ini dengan file konfigurasi yang Anda tulis manual. Traefik melakukan ini dengan mengamati Docker secara langsung: begitu container baru jalan, Traefik otomatis membuatkan rutenya.
Perbedaan ini kecil di atas kertas, besar dampaknya dalam pemakaian sehari-hari.
Nginx: Kendali Penuh, Konfigurasi Manual
Nginx sudah puluhan tahun menjadi standar. Ia cepat, stabil, dan dokumentasinya sangat lengkap. Setiap domain Anda daftarkan lewat satu blok server.
Contoh: Anda menjalankan aplikasi Node.js di port 3000 dan ingin diakses lewat app.contoh.com dengan HTTPS. Konfigurasinya seperti ini:
server {
listen 443 ssl;
server_name app.contoh.com;
ssl_certificate /etc/letsencrypt/live/app.contoh.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/app.contoh.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Setelah menulis file ini, Anda uji dan muat ulang:
sudo nginx -t && sudo systemctl reload nginx
Sertifikat HTTPS didapat lewat Certbot, biasanya satu perintah per domain:
sudo certbot --nginx -d app.contoh.com
Keunggulan Nginx yang paling terasa:
- Performa mentah. Untuk file statis dan beban tinggi, Nginx sulit dikalahkan.
- Fleksibel untuk kasus aneh. Rewrite rumit, aturan caching per path, autentikasi dasar, pembatasan rate — semuanya bisa ditulis eksplisit.
- Tidak bergantung Docker. Layanan di luar container, seperti aplikasi PHP-FPM atau binary langsung, ditangani sama mudahnya.
- Mudah diprediksi. Apa yang tertulis di file konfigurasi, itulah yang berjalan. Tidak ada sihir otomatis di balik layar.
Kelemahannya juga jelas: setiap layanan baru berarti satu file konfigurasi baru, satu perintah Certbot, dan satu reload. Dengan 2–3 layanan ini sepele. Dengan 15 layanan, rutinitasnya mulai terasa.
Traefik: Otomatis, Berbasis Label Docker
Traefik dirancang untuk dunia container. Anda tidak menulis konfigurasi per domain. Sebagai gantinya, Anda menempelkan label pada container, dan Traefik membaca label itu lewat Docker socket.
Contoh docker-compose.yml untuk Traefik sendiri ditambah satu layanan:
services:
traefik:
image: traefik:v3.0
command:
- --providers.docker=true
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --certificatesresolvers.letsencrypt.acme.email=anda@contoh.com
- --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
- --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
whoami:
image: traefik/whoami
labels:
- "traefik.http.routers.whoami.rule=Host(`whoami.contoh.com`)"
- "traefik.http.routers.whoami.entrypoints=websecure"
- "traefik.http.routers.whoami.tls.certresolver=letsencrypt"
Begitu docker compose up -d dijalankan, whoami.contoh.com langsung hidup dengan HTTPS. Tidak ada perintah Certbot, tidak ada reload. Tambah layanan baru? Tempel tiga label yang sama, jalankan container, selesai.
Keunggulan Traefik yang paling terasa:
- Nol konfigurasi per layanan. Sertifikat HTTPS diterbitkan dan diperpanjang otomatis untuk setiap domain baru.
- Cocok untuk banyak container. Semakin banyak layanan Docker Anda, semakin besar penghematan waktunya.
- Dashboard bawaan. Dengan satu flag tambahan, Anda bisa melihat semua router, service, dan sertifikat dari browser.
Kelemahannya perlu dicatat jujur:
- Wajib Docker. Layanan di luar container harus didaftarkan lewat file provider terpisah, dan di situlah keunggulan otomasinya hilang.
- Akses Docker socket adalah risiko keamanan. Container Traefik yang memegang socket Docker secara teori bisa mengendalikan host. Batasi dengan flag :ro seperti contoh di atas, dan jangan memasang dashboard tanpa autentikasi.
- Debugging lebih sulit. Saat rute tidak jalan, Anda tidak membaca satu file — Anda memeriksa label, provider, dan log Traefik.
- File acme.json harus dijaga. File ini menyimpan kunci dan sertifikat; atur permission-nya ke 600 dan ikutkan dalam backup.
Perbandingan Langsung
| Aspek | Nginx | Traefik |
|---|---|---|
| Penambahan layanan baru | Tulis config + Certbot + reload | Tempel label, selesai |
| HTTPS otomatis | Manual per domain (Certbot) | Otomatis per container |
| Layanan non-Docker | Sangat mudah | Perlu provider file |
| Performa file statis | Terbaik | Baik, bukan spesialisasinya |
| Kemudahan debugging | File bisa dibaca langsung | Label + log + dashboard |
| Kurva belajar | Rendah, dokumentasi melimpah | Sedang, konsep router/service/middleware |
Jadi, Mana yang Anda Pilih?
Pilih Nginx kalau:
- Layanan Anda sedikit (di bawah 5) atau campuran Docker dan non-Docker.
- Anda butuh aturan routing yang spesifik dan eksplisit.
- Anda mengutamakan performa file statis atau sudah nyaman dengan konfigurasinya.
Pilih Traefik kalau:
- Hampir semua layanan Anda berjalan di Docker Compose.
- Anda sering menambah dan menghapus layanan.
- Anda ingin HTTPS otomatis tanpa mengurus Certbot per domain.
Ada juga opsi ketiga yang sah: keduanya sekaligus. Traefik di depan untuk routing otomatis antar container, dengan Nginx di belakang satu container tertentu yang butuh aturan khusus. Ini bukan solusi paling rapi, tapi kadang paling praktis — dan tidak ada aturan yang melarangnya.
Satu catatan terakhir yang sering diabaikan: apa pun yang Anda pilih, jangan lupa membatasi siapa yang bisa mengakses panel atau dashboard-nya. Reverse proxy adalah pintu depan VPS Anda. Pintu depan yang bagus tapi tidak dikunci sama saja dengan tidak ada pintu.
Checklist Sebelum Memutuskan
- Daftar semua layanan Anda, dan tandai mana yang berjalan di Docker
- Hitung berapa sering Anda menambah layanan baru dalam sebulan
- Tentukan apakah Anda butuh aturan routing khusus (caching, rewrite, auth)
- Pastikan port 80 dan 443 hanya dipegang satu reverse proxy
- Siapkan backup konfigurasi (file Nginx atau acme.json Traefik) sebelum go-live
Komentar
Posting Komentar