Nginx · 2 min read · Oct 11, 2025
Limitazione della Velocità con Nginx

Questo articolo spiega come utilizzare il modulo HttpLimitReqModule di nginx per limitare il numero di richieste per una data sessione. Questo è utile, ad esempio, se il tuo sito è bersagliato da un bot che effettua più richieste al secondo, aumentando così il carico sul tuo server. Con il modulo HttpLimitReqModule puoi definire un limite di velocità e, se un visitatore supera questo limite, riceverà un errore 503.
1 Utilizzo del Modulo HttpLimitReq
Apri il tuo nginx.conf…
nano /etc/nginx/nginx.conf… e definisci un’area in cui vengono memorizzati gli stati delle sessioni - questo deve andare all’interno del contenitore http {}:
http {
[...]
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
[...]
}Questa area si chiama one ed è allocata con 10MB di memoria. Invece della variabile $remote_addr, utilizziamo la variabile $binary_remote_addr che riduce la dimensione dello stato a 64 byte. Ci possono essere circa 16.000 stati in una zona da 1MB, quindi 10MB consente circa 160.000 stati, quindi questo dovrebbe essere sufficiente per i tuoi visitatori. La velocità è limitata a una richiesta al secondo. Si prega di notare che è necessario utilizzare valori interi qui, quindi se desideri impostare il limite a metà richiesta al secondo, utilizzeresti 30r/m (30 richieste al minuto).
Per mettere in funzione questo limite, utilizziamo la direttiva limit_req. Puoi utilizzare questa direttiva nei contenitori http {}, server {}, e location {}, ma a mio parere, è più utile nei contenitori location {} che passano le richieste ai tuoi server app (PHP-FPM, mongrel, ecc.) perché altrimenti, se carichi una singola pagina con molte immagini, file CSS e JavaScript, probabilmente supereresti il limite di velocità dato con una singola richiesta di pagina.
Quindi mettiamo questo in un contenitore location ~ .php$ {}:
[...]
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
limit_req zone=one burst=5;
}
[...]limit_req zone=one burst=5; specifica che questo limite di velocità appartiene all’area di memorizzazione delle sessioni che abbiamo definito prima (a causa di zone=one) il che significa che il limite di velocità è 1r/s. Puoi immaginare il significato dell’opzione burst come una sorta di coda. Significa che se superi il limite di velocità, le richieste successive vengono ritardate, e solo se hai più richieste in attesa nella coda rispetto a quanto specificato nel parametro burst, riceverai un errore 503 (ad esempio, così:

).
Se non vuoi utilizzare questa coda (cioè consegnare immediatamente un 503 se qualcuno supera il limite di velocità), devi utilizzare l’opzione nodelay:
[...]
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
limit_req zone=one burst=5 nodelay;
}
[...]Non dimenticare di ricaricare nginx per far sì che le tue modifiche abbiano effetto:
systemctl nginx reload2 Link
- nginx: https://nginx.org/
- HttpLimitReqModule: http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.