Ubuntu’da Nginx Rate Limiting

Ubuntu sunucularında Nginx web sunucusu, yüksek trafikli web siteleri için popüler bir seçimdir.

Reklam Alanı

Ubuntu sunucularında Nginx web sunucusu, yüksek trafikli web siteleri için popüler bir seçimdir. Ancak, kötü niyetli botlar veya DDoS saldırıları nedeniyle sunucu kaynaklarının tükenmesi riski taşır. Rate limiting, belirli bir IP adresinden gelen istekleri sınırlayarak bu sorunu önler. Bu teknik, saniye, dakika veya saat başına izin verilen istek sayısını belirler ve aşılırsa istekleri reddeder veya geciktirir. Ubuntu ortamında Nginx rate limiting yapılandırması, oldukça esnek ve etkilidir. Bu makalede, kurumsal düzeyde bir yaklaşımla adım adım kurulum, yapılandırma ve optimizasyon süreçlerini ele alacağız. Böylece, web uygulamanızı güvenli ve performanslı hale getirebilirsiniz.

Nginx Rate Limiting’in Temel Bileşenleri

Nginx’te rate limiting, ana yapılandırma dosyasındaki limit_req_zone direktifi ile tanımlanan paylaşılan bellek bölgeleri üzerinden çalışır. Bu bölgeler, IP adreslerini anahtar olarak kullanarak istek sayısını takip eder. Örneğin, bir zone tanımlayarak 10 megabayt bellek ayırabilir ve dakika başına 10 istek sınırı koyabilirsiniz. Bu mekanizma, leaky bucket algoritmasına dayanır; istekler bir kova gibi birikir ve taşarsa reddedilir. Kurumsal ortamlarda, bu özellik API endpoint’leri veya login sayfaları için kritik öneme sahiptir, çünkü brute-force saldırılarını engeller.

Uygulama sırasında, zone’u location bloklarında limit_req ile referans verirsiniz. Burst parametresi, ani trafik patlamalarına izin verirken, nodelay ani reddi önler. Bu bileşenler, sunucu yükünü dengeler ve kullanıcı deneyimini korur. Yapılandırma hatalarını önlemek için syntax kontrolü yapmayı unutmayın: nginx -t komutu ile doğrulayın.

Ubuntu’da Nginx Rate Limiting Kurulum ve Yapılandırma Adımları

Ubuntu 20.04 veya 22.04 gibi LTS sürümlerinde başlayın. Öncelikle Nginx’i güncel tutun: sudo apt update && sudo apt upgrade nginx. Ardından, /etc/nginx/nginx.conf dosyasının http bloğuna limit_req_zone ekleyin. Örnek: limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s; Burada $binary_remote_addr ikili IP formatı kullanır, hafızayı optimize eder. Site-specific konfigürasyon için /etc/nginx/sites-available/default dosyasını düzenleyin.

  1. Server bloğunda location /api/ { limit_req zone=api_limit burst=10 nodelay; proxy_pass http://backend; } ekleyin. Burst=10, 10 ekstra istek biriktirir.
  2. Değişiklikleri kaydedin ve nginx -t ile test edin.
  3. Sudo systemctl reload nginx ile uygulayın.

Whitelist için geo modülüyle IP’leri hariç tutun: http bloğuna geo $white_ips { default 0; 192.168.1.0/24 1; } ekleyin, sonra if ($white_ips) { return 200; } ile bypass edin. Bu, iç ağ trafiğini etkilemez. Kurumsal deployment’larda, birden fazla zone tanımlayarak login (/login), API ve statik dosyalar için ayrı limitler koyun.

limit_req_zone Direktifinin Detaylı Kullanımı

limit_req_zone, key (genellikle $binary_remote_addr), zone adı, bellek boyutu ve rate parametrelerini alır. Rate=10r/m dakika başına 10 istek anlamına gelir; r/s saniye için kullanılır. Bellek boyutu 10m, yaklaşık 160.000 IP takip eder. Key olarak $http_x_forwarded_for ekleyerek proxy arkasındaki IP’leri yakalayın. Bu direktif http seviyesinde tanımlanmalı, worker süreçleri arasında paylaşılır.

limit_req ve İlgili Parametreler

location içinde limit_req zone=zone_adı burst=20 nodelay; burst, kuyruk uzunluğunu belirler; nodelay gecikme yerine anında işleme alır. status=429 ile HTTP 429 Too Many Requests döndürün. Delay=3s ile gecikme ekleyin. Log için limit_req_status $limit_req_status; ile izleyin.

Rate Limiting Kurallarını Test Etme ve İzleme

Test için Apache Bench (ab) veya siege kullanın. ab -n 100 -c 10 http://example.com/api/ ile 10 concurrent 100 istek gönderin. Nginx error log’unda (/var/log/nginx/error.log) “limiting requests, excess: X” mesajlarını arayın. Prometheus ve Grafana entegrasyonu için nginx-module-vts yükleyin, rate limiting metriklerini dashboard’lara ekleyin. Gerçek zamanlı izleme, kuralları ince ayarlamanıza yardımcı olur: Yüksek burst trafiği tespit edip artırın.

Optimizasyon adımları: Logları analiz edin, peak saatlerde rate’i dinamikleştirin (Lua modülüyle). Fail2ban entegrasyonuyla tekrarlanan ihlalleri banlayın. Performans testi sonrası, CPU ve bellek kullanımını monitör edin. Bu yaklaşımla, sistem kararlı kalır.

Sonuç olarak, Ubuntu’da Nginx rate limiting, güvenlik mimarisinin vazgeçilmez bir parçasıdır. Adım adım uygulayarak sunucunuzu korumuş olursunuz. Düzenli testler ve log incelemeleriyle kuralları evriltebilir, kurumsal standartlara uyum sağlayabilirsiniz. Bu yapılandırma, ölçeklenebilir web hizmetleri için sağlam bir temel sunar.

Kategori: Genel
Yazar: Meka
İçerik: 548 kelime
Okuma Süresi: 4 dakika
Zaman: Bugün
Yayım: 16-03-2026
Güncelleme: 16-03-2026