Tidak semua sistem butuh Cloudflare, CDN, atau WAF mahal untuk bertahan dari abuse. Faktanya, Nginx bawaan sudah punya rate limiting yang sangat kuat—asal dipahami dengan benar.
Masalahnya:
- Banyak yang salah pasang
- Salah hitung limit
- Salah scope
- Akhirnya blok user legit, sementara attacker lolos
Artikel ini membahas cara rate limiting Nginx bekerja, pola yang benar, dan kesalahan fatal yang sering terjadi.
Contents
- 1 1. Apa Itu Rate Limiting?
- 2 2. Senjata Utama Nginx
- 3 3. Konsep Penting yang Sering Diabaikan
- 4 4. Contoh Rate Limiting Paling Dasar
- 5 5. burst dan nodelay: Sering Salah Kaprah
- 6 6. Contoh yang Aman untuk User Nyata
- 7 7. Kesalahan Fatal #1: Rate Limit di server {}
- 8 8. Rate Limiting Login Tanpa Cloudflare
- 9 9. API Rate Limit (Lebih Cerdas dari IP)
- 10 10. NAT & Mobile Network: Musuh Rate Limit IP
- 11 11. limit_conn: Pelengkap, Bukan Pengganti
- 12 12. Custom Response & Logging
- 13 13. Rate Limiting ≠ Anti-DDoS
- 14 14. Checklist Aman Rate Limiting
- 15 15. Kesimpulan
- 16 Related Posts
1. Apa Itu Rate Limiting?
Rate limiting = membatasi jumlah request dalam periode waktu tertentu.
Tujuan:
- Mencegah brute force
- Mengurangi scraping
- Melindungi endpoint berat
- Menahan abuse bot
Bukan untuk:
- Mengganti firewall
- Mengganti DDoS protection skala besar
2. Senjata Utama Nginx
Nginx menyediakan dua directive inti:
limit_req_zone→ definisi zona & keylimit_req→ penerapan limit
Tambahan:
limit_conn_zonelimit_conn
3. Konsep Penting yang Sering Diabaikan
Rate limit ≠ per IP selalu
Key rate limit bebas:
- IP (
$binary_remote_addr) - Header (
$http_authorization) - Cookie
- API key
- User ID (jika diproxy)
Salah memilih key = rate limit gagal total.
4. Contoh Rate Limiting Paling Dasar
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
Artinya:
- Berdasarkan IP
- Maksimal 10 request/detik
- Zona RAM 10 MB
Diterapkan di location:
location /api/ {
limit_req zone=req_limit burst=20 nodelay;
proxy_pass http://backend;
}
5. burst dan nodelay: Sering Salah Kaprah
❌ Kesalahpahaman
“burst = tambahan limit”
Salah.
Cara Kerja Sebenarnya:
rate= kecepatan rata-rataburst= antrian sementaranodelay= langsung proses tanpa delay
Tanpa nodelay:
- Request berlebih ditunda, bukan ditolak
Dengan nodelay:
- Request di atas limit langsung 429
6. Contoh yang Aman untuk User Nyata
limit_req zone=req_limit burst=30;
Efek:
- User bisa klik cepat
- Bot tetap tertahan
- UX lebih manusiawi
7. Kesalahan Fatal #1: Rate Limit di server {}
server {
limit_req zone=req_limit;
}
Dampak:
- Semua endpoint kena limit
- Asset statis ikut dibatasi
- Website terasa “lemot”
✅ Yang Benar
Rate limit hanya di endpoint sensitif:
/login/api/search/wp-login.php
8. Rate Limiting Login Tanpa Cloudflare
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/m;
location = /login {
limit_req zone=login_limit burst=5;
proxy_pass http://backend;
}
Efek:
- Bruteforce login mati
- User normal tetap aman
9. API Rate Limit (Lebih Cerdas dari IP)
Salah:
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
Lebih Benar (API Key):
limit_req_zone $http_x_api_key zone=api:10m rate=20r/s;
Keuntungan:
- Tidak rusak oleh NAT
- Lebih adil
- Lebih presisi
10. NAT & Mobile Network: Musuh Rate Limit IP
Satu IP bisa:
- Puluhan user mobile
- Ratusan user kantor
Solusi:
- Rate lebih longgar
- Gunakan header auth
- Kombinasikan dengan
burst
11. limit_conn: Pelengkap, Bukan Pengganti
Batasi koneksi bersamaan:
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
location / {
limit_conn conn_limit 10;
}
Fungsi:
- Menahan slowloris
- Menahan client super lambat
12. Custom Response & Logging
Status default:
- 503 (tanpa
nodelay) - 429 (dengan
nodelay)
Custom:
limit_req_status 429;
Log khusus:
error_log /var/log/nginx/ratelimit.log notice;
13. Rate Limiting ≠ Anti-DDoS
Harus jujur:
- Nginx tidak menggantikan Cloudflare
- DDoS besar tetap butuh CDN / provider
Namun:
- Untuk abuse ringan–menengah
- Internal API
- Admin panel
➡️ Nginx sudah lebih dari cukup
14. Checklist Aman Rate Limiting
- ✅ Scope sempit
- ✅ Key tepat
- ✅ Burst manusiawi
- ❌ Jangan limit asset statis
- ❌ Jangan limit global tanpa pikir
15. Kesimpulan
Rate limiting tanpa Cloudflare:
- Bisa
- Efektif
- Murah
- Stabil
Asal:
Jangan asal copy-paste konfigurasi
Jika mengingat satu hal saja:
Rate limit yang baik menahan bot, bukan manusia