Nginx · 2 min read · Jan 23, 2026
Limitazione della velocità con nginx
Questo articolo spiega come utilizzare il modulo HttpLimitReqModule di nginx per limitare il numero di richieste per una determinata sessione. Questo è utile, ad esempio, se il tuo sito è bersagliato da un bot che effettua più richieste al secondo, aumentando così il carico del tuo server. Con il modulo ngx_http_limit_req_module, puoi definire un limite di velocità e, se un visitatore supera questo limite, riceverà un errore 503.
1 Utilizzo del modulo HttpLimitReqModule (ngx_http_limit_req_module)
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 10MB di spazio. 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 consentono 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 avviso è più utile nei contenitori location {} che passano le richieste ai tuoi server applicativi (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 di 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 di quelle specificate nel parametro burst, riceverai un errore 503 (ad esempio, così:

).
Se non vuoi utilizzare questa coda (cioè fornire 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 rendere effettive le tue modifiche:
service nginx reload2 Link
- nginx: http://nginx.net/
- HttpLimitReqModule: http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
Informazioni sull’autore
Falko Timme è il proprietario di Timme Hosting (hosting web nginx ultra-veloce). È il principale manutentore di HowtoForge (dal 2005) e uno dei core developer di ISPConfig (dal 2000). Ha anche contribuito al libro di O’Reilly “Linux System Administration”.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.