Dokumen ini ditujukan untuk environment production kritikal, di mana NGINX berperan sebagai:
- reverse proxy utama
- load balancer
- TLS termination
- API gateway
- entry point microservices
Kegagalan NGINX = seluruh sistem tidak dapat diakses, sehingga backup & restore bukan opsional, melainkan bagian dari business continuity plan.
Contents
- 1 1. Filosofi Backup NGINX (Bukan Sekadar Copy File)
- 2 2. Apa yang SEBENARNYA Perlu Dibackup (dan Alasannya)
- 3 3. Strategi Backup yang BENAR untuk Production
- 4 4. Script Backup Production-Grade (Bukan Contoh Main-main)
- 5 5. RESTORE: BAGIAN PALING KRITIKAL (DAN PALING SERING GAGAL)
- 6 6. Restore Parsial (Kasus Paling Umum)
- 7 7. Restore SSL (Kasus Paling Berisiko)
- 8 8. Restore Full (Server Masih Hidup)
- 9 9. Restore Total (Server Mati Total)
- 10 10. Testing Restore (Wajib, Bukan Opsional)
- 11 11. Kesalahan Fatal yang Sering Terjadi
- 12 12. Kesimpulan Akhir (Realita Production)
- 13 Related Posts
1. Filosofi Backup NGINX (Bukan Sekadar Copy File)
1.1 Kesalahan Pola Pikir Umum
Banyak engineer berpikir:
βNGINX tinggal install ulang, konfigurasi gampangβ
Ini salah besar di production karena:
- Konfigurasi berkembang bertahun-tahun
- Banyak edge-case tersembunyi
- Rewrite & proxy rule saling bergantung
- SSL chain sering custom
- Human memory tidak bisa diandalkan saat incident
Backup NGINX bertujuan untuk:
- menghilangkan ketergantungan pada ingatan manusia
- memastikan recovery deterministik, bukan trial-error
2. Apa yang SEBENARNYA Perlu Dibackup (dan Alasannya)
2.1 Konfigurasi NGINX β Bukan Sekadar nginx.conf
Banyak kegagalan restore terjadi karena backup konfigurasi tidak utuh.
Struktur konfigurasi NGINX nyata di production:
/etc/nginx/
βββ nginx.conf
βββ conf.d/
β βββ upstream.conf
β βββ rate-limit.conf
β βββ security.conf
βββ sites-available/
β βββ app.conf
β βββ api.conf
β βββ admin.conf
βββ sites-enabled/
β βββ app.conf -> ../sites-available/app.conf
β βββ api.conf -> ../sites-available/api.conf
βββ snippets/
β βββ ssl.conf
β βββ proxy.conf
βββ modules-enabled/
β Masalah umum saat restore
- symlink hilang
- file snippet tidak ikut
- permission berubah
- modul tidak tersedia
β‘οΈ Best practice
Backup SELURUH /etc/nginx, bukan file terpilih.
2.2 SSL / TLS β Area Paling Berbahaya
SSL adalah komponen paling sensitif.
Yang harus dibackup:
- private key
- certificate
- chain
- renewal config (Letβs Encrypt)
Lokasi nyata:
/etc/letsencrypt/
βββ live/
βββ archive/
βββ renewal/
βββ accounts/
β Kenapa backup Letβs Encrypt sering gagal?
- orang hanya backup
/live - padahal renewal butuh
/archivedan/renewal
β‘οΈ Jika hanya backup /live, HTTPS mungkin jalan, tapi renewal gagal.
2.3 File Website β Jangan Asumsikan Stateless
Walaupun aplikasi modern sering stateless, NGINX hampir selalu melayani file stateful, misalnya:
- upload user
- cache image
- static build frontend
- verification file (ACME challenge)
Jika ini hilang:
- website bisa error meskipun NGINX running
2.4 File Pendukung yang Sering Dilupakan
Ini yang paling sering menyebabkan βkok beda sama sebelumnya?β:
.htpasswd- custom error page
- GeoIP database
- Lua script (OpenResty)
- IP whitelist file
- cron job yang reload NGINX
β‘οΈ Inventarisasi manual sangat penting.
3. Strategi Backup yang BENAR untuk Production
3.1 Kenapa Full Backup Lebih Aman untuk NGINX
Konfigurasi NGINX:
- kecil ukurannya
- kompleks relasinya
- berubah tidak terlalu sering
β‘οΈ Incremental backup hampir tidak memberi manfaat, tapi menambah kompleksitas restore.
Kesimpulan:
Konfigurasi NGINX = SELALU full backup
3.2 Retention Policy Bukan Formalitas
Tanpa retention:
- disk penuh
- backup gagal
- tidak ada alert
- restore terakhir ternyata korup
Contoh kebijakan realistis:
- harian: rollback cepat
- mingguan: rollback konfigurasi lama
- bulanan: audit & compliance
3.3 Offsite Backup = Syarat Mutlak
Jika backup berada di server yang sama:
- disk corrupt β backup ikut rusak
- ransomware β backup ikut terenkripsi
- VM hilang β backup ikut hilang
β‘οΈ Backup lokal tanpa offsite = bukan backup
4. Script Backup Production-Grade (Bukan Contoh Main-main)
#!/bin/bash
set -euo pipefail
DATE=$(date +%F)
HOST=$(hostname -f)
BASE_DIR="/backup/nginx"
WORK_DIR="$BASE_DIR/$HOST"
FILE="$WORK_DIR/nginx-$DATE.tar.gz"
mkdir -p "$WORK_DIR"
tar \
--numeric-owner \
--xattrs \
-czf "$FILE" \
/etc/nginx \
/etc/ssl \
/etc/letsencrypt \
/var/www
chmod 600 "$FILE"
Kenapa flags ini penting?
numeric-ownerβ user/group konsistenxattrsβ extended attributes tidak hilangset -euo pipefailβ script gagal jika ada error sekecil apa pun
5. RESTORE: BAGIAN PALING KRITIKAL (DAN PALING SERING GAGAL)
Backup tidak berguna tanpa restore yang benar.
6. Restore Parsial (Kasus Paling Umum)
Kasus Nyata:
- Engineer edit config
- reload gagal
- traffic mati
Langkah Aman:
systemctl stop nginx
mv /etc/nginx /etc/nginx.failed.$(date +%s)
tar -xzvf nginx-backup.tar.gz etc/nginx
nginx -t
systemctl start nginx
Kenapa mv bukan rm?
- untuk forensik
- rollback manual jika backup bermasalah
7. Restore SSL (Kasus Paling Berisiko)
SSL restore tidak boleh asal extract.
tar -xzvf nginx-backup.tar.gz etc/letsencrypt
chmod -R go-rwx /etc/letsencrypt
systemctl reload nginx
β Jika permission salah:
- NGINX gagal start
- atau lebih buruk: key bisa dibaca user lain
8. Restore Full (Server Masih Hidup)
Ini skenario rollback total.
systemctl stop nginx
mkdir /root/pre-restore
mv /etc/nginx /root/pre-restore/
mv /etc/letsencrypt /root/pre-restore/
mv /var/www /root/pre-restore/
tar -xzvf nginx-backup.tar.gz -C /
nginx -t
systemctl start nginx
9. Restore Total (Server Mati Total)
Ini yang membedakan engineer junior vs senior
Langkah nyata di incident:
- Provision VM
- Install OS minimal
- Install NGINX versi kompatibel
- Restore backup
- Verifikasi
- Cut traffic
Target realistis:
- 15β30 menit
Tanpa backup:
- bisa berjam-jam
- atau berhari-hari
10. Testing Restore (Wajib, Bukan Opsional)
Checklist minimal:
nginx -t- HTTPS handshake sukses
- proxy upstream hidup
- static file ter-load
Lakukan sebelum incident, bukan saat panic.
11. Kesalahan Fatal yang Sering Terjadi
β Backup config tapi lupa SSL
β Backup SSL tapi lupa renewal config
β Backup sukses tapi restore tidak pernah diuji
β Restore overwrite tanpa backup kondisi lama
β Backup tanpa enkripsi
12. Kesimpulan Akhir (Realita Production)
Backup bukan tentang menyimpan data
Restore adalah tentang menyelamatkan layanan
Engineer yang matang:
- tidak berharap server tidak pernah gagal
- bersiap untuk kegagalan