Nginx Rate Limiting Ayarlarıyla Trafik Kontrolü
Nginx Rate Limiting Ayarlarıyla Trafik Kontrolü
Nginx Rate Limiting, web sunucusuna gelen isteklerin belirli bir hızda kabul edilmesini sağlayan güçlü bir trafik yönetim ve güvenlik aracıdır. Bu özellik sayesinde, hem DDoS (Distributed Denial of Service) saldırılarına karşı önlem alınabilir hem de sistem kaynakları dengeli bir şekilde kullanılabilir. Bu rehberde, Nginx üzerinde hız sınırlama (rate limiting) yapılandırmasını adım adım inceleyeceğiz.
- Rate Limiting Nedir?
- Nginx Rate Limiting Yöntemleri
- 1. limit_req_zone ile İstek Hızı Sınırlama
- Uygulama Örneği:
- 2. limit_conn_zone ile Bağlantı Sayısı Sınırlama
- 3. limit_req ve limit_conn Birlikte Kullanımı
- 4. Whitelist (Beyaz Liste) Tanımlama
- 5. Rate Limiting Yanıt Kodları
- 6. limit_req_status Parametresi (Yeni Sürümler)
- 7. Gerçek Zamanlı İzleme
- 8. Performans ve Optimizasyon
- 9. Güvenlik ve DDoS Koruması
- 10. Rate Limiting Yapılandırmasını Test Etme
- Sonuç
Rate Limiting Nedir?
Rate limiting, belirli bir IP adresinden veya istemciden gelen istek sayısını belli bir süre içinde sınırlandırma yöntemidir. Amaç, aynı kaynaktan aşırı istek geldiğinde sunucunun yük altında kalmasını engellemektir.
Nginx Rate Limiting Yöntemleri
Nginx iki ana mekanizma kullanır:
- limit_req_zone: İstek oranını (requests per second) sınırlar.
- limit_conn_zone: Eşzamanlı bağlantı sayısını sınırlar.
1. limit_req_zone ile İstek Hızı Sınırlama
İlk olarak, IP adresine göre istekleri sınırlayan bir bellek alanı tanımlanır:
http {
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;
}
Açıklama:
$binary_remote_addr: İstemci IP adresini temsil eder.zone=api_limit:10m: 10 MB’lık bir paylaşımlı bellek alanı oluşturur.rate=5r/s: Saniyede 5 istek sınırı belirlenir.
Uygulama Örneği:
server {
location /api/ {
limit_req zone=api_limit burst=10 nodelay;
proxy_pass http://backend_api;
}
}
burst=10, anlık yoğunluklarda 10 isteğe kadar beklemeye alınmasına izin verir. nodelay parametresi, bu ek isteklerin gecikmeden işlenmesini sağlar.
2. limit_conn_zone ile Bağlantı Sayısı Sınırlama
Bu yöntem, aynı IP’den açılabilecek eşzamanlı bağlantı sayısını sınırlar:
http {
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
}
server {
location /download/ {
limit_conn conn_limit 2;
}
}
Yukarıdaki örnekte, bir IP aynı anda en fazla iki bağlantı açabilir.
3. limit_req ve limit_conn Birlikte Kullanımı
Daha etkili bir trafik yönetimi için bu iki yöntemi birlikte kullanabilirsiniz:
location / {
limit_req zone=req_limit burst=20 nodelay;
limit_conn conn_limit 3;
proxy_pass http://backend;
}
4. Whitelist (Beyaz Liste) Tanımlama
Bazı IP adreslerinin sınırlamalardan muaf olmasını istiyorsanız:
geo $whitelist {
default 0;
192.168.1.0/24 1;
}
map $whitelist $limit_bypass {
1 "";
0 $binary_remote_addr;
}
limit_req_zone $limit_bypass zone=req_limit:10m rate=5r/s;
Bu örnekte, 192.168.1.0/24 alt ağındaki istemciler sınırlamalardan etkilenmez.
5. Rate Limiting Yanıt Kodları
Sınırı aşan isteklerde Nginx varsayılan olarak 503 Service Unavailable döner. Ancak özel hata sayfası tanımlayabilirsiniz:
error_page 503 @rate_limited;
location @rate_limited {
return 429 "Too Many Requests\n";
}
6. limit_req_status Parametresi (Yeni Sürümler)
Nginx 1.17 ve üzeri sürümlerde, limit aşıldığında dönecek özel durum kodu belirtilebilir:
limit_req_status 429;
7. Gerçek Zamanlı İzleme
Rate limiting istatistiklerini izlemek için stub_status veya Grafana + Prometheus entegrasyonu kullanılabilir. Ayrıca loglarda “limiting requests” satırlarını kontrol ederek hangi IP’lerin sınıra ulaştığını görebilirsiniz.
8. Performans ve Optimizasyon
- Paylaşımlı bellek alanını (zone) trafiğe göre ayarlayın (örnek: 10m = ~160.000 IP kaydı).
- Statik dosyalarda rate limiting uygulamayın, sadece dinamik API uç noktalarında kullanın.
- CDN (Cloudflare vb.) katmanı ile birlikte kullanarak ekstra koruma sağlayın.
9. Güvenlik ve DDoS Koruması
Nginx rate limiting, özellikle düşük hacimli DDoS veya brute-force saldırılarına karşı etkilidir. Gelişmiş güvenlik için WAF Koruma ve Premium VDS çözümleriyle birlikte kullanılabilir.
10. Rate Limiting Yapılandırmasını Test Etme
İstek sınırını test etmek için basit bir ab (Apache Benchmark) veya curl komutu kullanılabilir:
ab -n 100 -c 20 http://example.com/api/
curl -I http://example.com/api/
Sınıra ulaşıldığında 429 veya 503 yanıt kodu alınır.
Sonuç
Nginx Rate Limiting, web uygulamalarını aşırı trafik ve saldırılara karşı korumanın en etkili yöntemlerinden biridir. Doğru yapılandırıldığında hem sistem kaynaklarını dengede tutar hem de kötü niyetli trafiği engeller. Daha ileri düzey güvenlik ve performans çözümleri için HostLigo’nun optimize edilmiş VDS Sunucular ve WAF hizmetleriyle sisteminizi güçlendirebilirsiniz.