Jika ada satu directive Nginx yang:
- Jarang dibahas
- Jarang dipahami
- Tapi sering jadi solusi paling bersih
Maka jawabannya adalah: map.
Ironisnya, banyak konfigurasi Nginx menjadi:
- Penuh
if - Sulit dibaca
- Sulit di-debug
padahal semua itu bisa disederhanakan denganmap.
Contents
- 1 1. Apa Itu map?
- 2 2. Kenapa map Lebih Baik dari if?
- 3 3. Contoh Paling Umum (Tapi Jarang Dipakai)
- 4 4. map Dievaluasi di Fase Awal (Penting!)
- 5 5. Use Case #1: Cache Bypass yang WARAS
- 6 6. Use Case #2: Rate Limiting Pintar
- 7 7. Use Case #3: A/B Testing TANPA Tool Tambahan
- 8 8. Use Case #4: Multi-Upstream Routing
- 9 9. Regex di map: Fleksibel Tapi Aman
- 10 10. map Bisa Dipakai di log_format
- 11 11. Performa map: Jangan Takut
- 12 12. Kesalahan Umum Saat Pakai map
- 13 13. Pola Mental yang Benar
- 14 14. Kenapa map Jarang Dipakai?
- 15 15. Kesimpulan
- 16 Related Posts
1. Apa Itu map?
map adalah directive untuk:
Memetakan satu variable menjadi variable lain berdasarkan kondisi
Ia dievaluasi:
- Sekali per request
- Sangat cepat
- Tanpa branching kompleks
Sintaks dasar:
map $variable_asal $variable_baru {
kondisi nilai;
default nilai_default;
}
2. Kenapa map Lebih Baik dari if?
Fakta pahit:
ifdi Nginx bukan if biasa- Bisa menyebabkan perilaku tak terduga
- Sulit di-maintain
- Sulit di-debug
Dokumentasi resmi bahkan terkenal dengan kalimat:
“if is evil”
map:
- Aman
- Deterministik
- Dievaluasi lebih awal
- Cocok untuk logic routing
3. Contoh Paling Umum (Tapi Jarang Dipakai)
❌ Tanpa map
location / {
if ($http_user_agent ~* mobile) {
set $is_mobile 1;
}
}
✅ Dengan map
map $http_user_agent $is_mobile {
~*mobile 1;
default 0;
}
Lebih:
- Bersih
- Konsisten
- Mudah diperluas
4. map Dievaluasi di Fase Awal (Penting!)
map:
- Dievaluasi sebelum
location - Bisa dipakai di:
proxy_passfastcgi_passproxy_cache_bypasslimit_reqlog_format
Inilah kekuatannya.
5. Use Case #1: Cache Bypass yang WARAS
Tanpa map (Chaos)
if ($http_cookie ~ session) {
set $skip_cache 1;
}
Dengan map (Elegan)
map $http_cookie $skip_cache {
default 0;
~session 1;
}
proxy_cache_bypass $skip_cache;
proxy_no_cache $skip_cache;
Ini pola production-grade.
6. Use Case #2: Rate Limiting Pintar
Rate limit user login, tapi longgar untuk internal IP:
map $remote_addr $login_rate {
10.0.0.0/8 unlimited;
default 5r/m;
}
Dipakai di:
limit_req_zone $binary_remote_addr zone=login:10m rate=$login_rate;
Tanpa map, ini hampir mustahil dibaca.
7. Use Case #3: A/B Testing TANPA Tool Tambahan
map $remote_addr $variant {
~^[0-7] A;
default B;
}
add_header X-Variant $variant;
Digunakan untuk:
- Feature flag sederhana
- Gradual rollout
- Canary release
Tanpa backend berubah.
8. Use Case #4: Multi-Upstream Routing
map $http_x_region $backend {
id backend_id;
sg backend_sg;
default backend_default;
}
proxy_pass http://$backend;
Ini sangat powerful:
- Tidak perlu
if - Tidak perlu
rewrite - Tidak perlu reload logic
9. Regex di map: Fleksibel Tapi Aman
map $request_uri $is_api {
~^/api/ 1;
default 0;
}
Dipakai untuk:
- Cache rule
- Rate limit
- Header injection
Regex di map jauh lebih aman dibanding di if.
10. map Bisa Dipakai di log_format
Ini underrated level dewa.
map $status $loggable {
499 0;
default 1;
}
access_log /var/log/nginx/access.log combined if=$loggable;
Efek:
- 499 tidak mengotori log
- Disk lebih awet
- Analisis lebih bersih
11. Performa map: Jangan Takut
map:
- Dievaluasi sekali
- Disimpan di memory
- Hampir tidak terasa overhead-nya
Dibanding:
- Regex berulang di
if - Rewrite berkali-kali
map lebih cepat dan stabil.
12. Kesalahan Umum Saat Pakai map
- Menaruh
mapdi dalamserver {}❌
→mapharus dihttp {} - Tidak pakai
default❌
→ Bisa menghasilkan variable kosong - Terlalu banyak regex berat ❌
→ Tetap perlu kontrol
13. Pola Mental yang Benar
Gunakan map untuk:
- Keputusan
- Flag
- Routing
- Policy
Gunakan location untuk:
- Path matching
- File handling
Jika logic Anda mulai “bercabang”, itu tanda map dibutuhkan.
14. Kenapa map Jarang Dipakai?
Karena:
- Tidak “kelihatan”
- Tidak error kalau tidak ada
- Jarang di tutorial pemula
- Tidak viral seperti
proxy_pass
Padahal:
Banyak konfigurasi Nginx level senior tidak mungkin rapi tanpa
map.
15. Kesimpulan
Jika Anda ingin naik level di Nginx:
Berhenti pakai
if, mulai pakaimap.
map adalah:
- Cleaner
- Safer
- Lebih scalable
- Lebih mudah di-maintain
Dan mungkin:
Fitur Nginx paling underrated di dunia nyata.