Come limitare la frequenza delle connessioni (richieste) in NGINX

instagram story viewer

Nel nostro ultimo articolo che fa parte della nostra serie di gestione del traffico NGINX, abbiamo discusso di come limitare il numero di connessioni in NGINX. In questa guida, vedremo come limitare il tasso di richieste in NGINX.

La limitazione della velocità è una tecnica di gestione del traffico utilizzata per limitare il numero di HTTP richieste che un cliente può effettuare in un determinato periodo di tempo - i limiti di tariffa sono calcolati Richieste al secondo (o RPS).

Un esempio di richiesta è a OTTENERE richiesta della pagina di accesso di un'applicazione o a INVIARE richiesta su un modulo di accesso o a INVIARE su un API punto finale.

Ci sono molte ragioni per limitare la frequenza delle richieste alle tue applicazioni web o ai servizi API, una è la sicurezza: la protezione da richieste rapide abusive.

Limitare il tasso di connessioni in NGINX

Inizia definendo i parametri per la limitazione della velocità utilizzando il limit_req_zone direttiva. I parametri richiesti sono una chiave per identificare i client, una zona di memoria condivisa che memorizzerà lo stato della chiave e la frequenza con cui ha effettuato l'accesso a un URL con restrizioni di richiesta e la velocità.

Il limit_req_zone la direttiva è valida all'interno del contesto HTTP.

limit_req_zone $binary_remote_addr zona=limitreqsbyaddr: 20m rate=10r/s; 

Inoltre, imposta un codice di stato della risposta che viene restituito alle richieste rifiutate, utilizzando il stato_limite_req direttiva valida all'interno dei contesti HTTP, server e posizione.

stato_req_limite 429; 

Ora puoi usare il limin_conn direttiva per abilitare la limitazione della velocità delle richieste nei contesti HTTP, server e posizione. Prende una zona di memoria come parametro e altri parametri opzionali.

limit_req zona=limitreqsbyaddr; 

L'esempio di configurazione seguente mostra la limitazione della frequenza delle richieste a un'API di un'applicazione Web. La dimensione della memoria condivisa è di 20 MB e il limite di velocità di richiesta è di 10 richieste al secondo.

api_service a monte { server 127.0.0.1:9051; server 10.1.1.77:9052; }
limit_req_zone $binary_remote_addr zona=limitreqsbyaddr: 20m rate=10r/s;stato_req_limite 429; server {ascolta 80; nome_server testapp.tecmint.com; radice /var/www/html/testapp.tecmint.com/build; indice index.html; #include frammenti/pagine_error.conf; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; posizione / { file_prova $uri $uri/ /indice.html =404 =403 =500; } posizione /api { limit_req zona=limitregsbyaddr;proxy_pass http://api_service; proxy_set_header X-Real-IP $indirizzo_remoto; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_versione 1.1; proxy_set_header Aggiorna $http_upgrade; proxy_set_header Connessione "aggiornamento"; } }

Salva il file di configurazione e chiudilo.

Quindi controlla se il NGINX la sintassi di configurazione è corretta utilizzando il comando seguente:

$ sudo nginx -t. 

Dopodiché, ricarica il NGINX servizio applica le ultime modifiche:

$ sudo systemctl ricarica nginx. 

Una volta che il limite di velocità di 10 richieste al secondo viene superata dall'accesso di un singolo client /api/, NGINX restituisce un "429 Troppe richieste” errore al client.

Nginx 429 Troppe richieste Errore
Nginx 429 Troppe richieste Errore

Registra anche l'incidente nel registro degli errori.

29/04/2022 00:30:38 [errore] 3145846#0: *131039 limitazione delle richieste, eccesso: 0,990 per zona "limitreqsbyaddr", client: 192.168.1.10, server: testapp.tecmint.com, richiesta: "GET /api/v1/app/meta-data HTTP/1.1", host: "testapp.tecmint.com", referente: " https://testapp.tecmint.com/"
Registri degli errori di Nginx
Registri degli errori di Nginx

A volte, a seconda della natura dell'applicazione o dell'API, un client dovrà effettuare molte richieste contemporaneamente, quindi ridurre la velocità per un periodo di tempo prima di farne di più. NGINX può anche bufferizzare eventuali richieste in eccesso in una coda ed elaborarle prontamente.

È possibile abilitare questo comportamento nella limitazione della frequenza utilizzando il scoppiare parametro con il limite_req direttiva. Per abilitare l'accodamento senza ritardi, aggiungi il file nessun ritardo parametro.

limit_req zone=limitregsbyaddr burst=20 nodelay; 

C'è un problema con la limitazione della velocità basata sull'IP di un client, in particolare per gli utenti che accedono all'applicazione dalla stessa rete e operano dietro un NAT. In questo caso, tutte le loro richieste proverranno dallo stesso indirizzo IP. In tale scenario, puoi utilizzare altre variabili per identificare i client, come un cookie di sessione.

Per ulteriori informazioni sulla limitazione del tasso di richieste, dai un'occhiata a questo Limitazione della velocità NGINX sul sito NGINX. Successivamente, tratteremo come limitare l'utilizzo della larghezza di banda in NGINX.

Teachs.ru