WordPress login, REST API ve genel sayfalarınız için meşru ziyaretçileri yavaşlatmadan botları ve Layer 7 saldırılarını engelleyen yapılandırmayı oluşturun.
Nginx web sunucunuzda Layer 7 HTTP flood, brute-force ve bot taramalarını engelleyen optimize limit kurallarını oluşturun.
Normal sayfalar için izin verilen saniyelik azami istek.
CSS, JS ve resim yüklemelerinde kullanıcıyı engellemez.
Brute-force botlarının parola denemelerini durdurur.
Slowloris tarzı soket tüketim saldırılarını engeller.
Bu IP adresleri hız sınırlarından tamamen muaf tutulur.
# ========================================================
# Nginx Layer 7 Hiz Sinirlama ve DDoS Onleme Yapilandirmasi
# ========================================================
# /etc/nginx/conf.d/00-rate-limit-zones.conf
# 10MB paylasimli bellek havuzu (~160.000 IP adresini saklar)
# Cloudflare Gercek IP Tespiti
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
real_ip_header CF-Connecting-IP;
# Genel web trafigi bolgesi (20 istek/sn)
limit_req_zone $binary_remote_addr zone=req_general:10m rate=20r/s;
# Kritik giris / admin bolgesi (2 istek/sn)
limit_req_zone $binary_remote_addr zone=req_auth:10m rate=2r/s;
# IP basina eszamanli acik TCP baglanti siniri
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
listen 80;
listen 443 ssl http2;
server_name alanadiniz.com;
# Sunucu ve Konum (Location) Yapilandirmasi
limit_req_status 429;
limit_conn_status 429;
limit_req_log_level warn;
# IP basina eszamanli TCP baglanti limiti (Slowloris korumasi)
limit_conn conn_limit 15;
# 1. Tum site icin genel istek siniri
location / {
limit_req zone=req_general burst=30 nodelay;
try_files $uri $uri/ /index.php?$args;
}
# 2. WordPress Login ve XML-RPC Brute Force Korumasi
location ~* ^/(wp-login\.php|xmlrpc\.php) {
limit_req zone=req_auth burst=5 nodelay;
include fastcgi_params;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
# 3. WordPress REST API ve Admin Ajax
location ~* ^/(wp-json|wp-admin/admin-ajax\.php) {
limit_req zone=req_general burst=30 nodelay;
include fastcgi_params;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
}Sunucunuzda Apache Benchmark (ab) ile eşzamanlı istek gönderip HTTP 429 yanıtı alıp almadığınızı test edin:
ab -n 100 -c 10 https://alanadiniz.com/Nginx hız sınırlama mekanizmasında Leaky Bucket (Sızdıran Kova) algoritmasını kullanır. İstemcilerden gelen istekler sanal bir kuyruğa alınır ve belirlenen saniyelik hızda (örneğin saniyede 10 istek) işlenir. Kova taştığında gelen istekler doğrudan reddedilir.
Modern bir web sayfasına girildiğinde tarayıcı aynı anda 20-30 paralel istek (CSS, JS, WebP, fontlar) gönderir. Eğer burst parametresi tanımlanmazsa normal bir kullanıcı sayfayı açtığında bile Nginx tarafından engellenir.nodelay bayrağı eklendiğinde ise bu patlama anındaki istekler bekletilmeden derhal işlenir ve kullanıcı hız kaybı hissetmez.
Nginx varsayılan olarak 503 Service Unavailable döner. Bu durum arama motoru botlarının sitenizin çöktüğünü düşünmesine ve SEO indeks kaybına yol açabilir. limit_req_status 429 (Too Many Requests) kuralı ise istemciye ve Googlebot'a “Sunucu sağlıklı, fakat çok hızlı istek gönderdin” mesajını standart HTTP koduyla iletir.