În timp ce directiva limit_req limitează frecvența cererilor pe secundă (Request Rate), directiva limit_conn controlează numărul de conexiuni TCP simultane active pe care o singură adresă IP le poate menține deschise. Este arma principală împotriva atacurilor de tip Slowloris (unde atacatorii deschid sute de conexiuni și trimit date extrem de lent pentru a epuiza memoria serverului) și a scraperelor care descarcă zeci de fișiere mari în paralel.
Configurația recomandată pentru limit_conn
# În contextul http (alocarea memoriei pentru tabela de urmărire IP-uri):
# $binary_remote_addr consumă doar 4 bytes per adresă IPv4 (față de 15 bytes string)!
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
listen 80;
server_name www.dexblog.ro;
# Codul HTTP returnat clientului când depășește limita:
limit_conn_status 429;
location /downloads/ {
# Permite maximum 3 descărcări simultane de pe aceeași adresă IP:
limit_conn perip 3;
# Limitează și viteza de descărcare la 500 KB/s per conexiune:
limit_rate 500k;
}
location / {
# Permite maximum 25 de conexiuni concurente per vizitator legitim:
limit_conn perip 25;
# Protejează întregul domeniu să nu depășească 5000 de conexiuni totale concurente:
limit_conn perserver 5000;
}
}