![Kako najti in preveriti geslo za WiFi v sistemu Android](/f/42f19b22434221ab8f339c925920993b.png?width=100&height=100)
V našem zadnjem članku, ki je del naše serije upravljanja prometa NGINX, smo razpravljali o tem, kako omejiti število povezav v NGINX. V tem priročniku si bomo ogledali, kako omejiti število zahtev v NGINX.
Omejevanje hitrosti je tehnika upravljanja prometa, ki se uporablja za omejevanje števila HTTP zahteve, ki jih lahko stranka vnese v določenem časovnem obdobju – omejitve tečajev se izračunajo v Zahteve na sekundo (oz RPS).
Primer zahteve je a GET zahteva za prijavno stran aplikacije ali a OBJAVI zahteva na obrazcu za prijavo ali a OBJAVI na API končna točka.
Obstaja veliko razlogov za omejitev stopnje zahtev na vaše spletne aplikacije ali storitve API, eden je varnost: zaščita pred zlorabami hitrih zahtev.
Začnite z definiranjem parametrov za omejevanje hitrosti z uporabo omejitev_req_zone
direktivo. Zahtevani parametri so ključ za identifikacijo odjemalcev, območje skupnega pomnilnika, ki bo shranilo stanje ključa in kako pogosto je dostopal do URL-ja z omejeno zahtevo ter hitrost.
The omejitev_req_zone
direktiva velja v kontekstu HTTP.
limit_req_zone $binary_remote_addr zone=limitreqsbyaddr: hitrost 20m=10r/s;
Nastavite tudi kodo stanja odgovora, ki se vrne zavrnjenim zahtevam, z uporabo limit_req_status
direktivo, ki je veljavna v kontekstih HTTP, strežnika in lokacije.
limit_req_status 429;
Zdaj lahko uporabite limit_conn
direktivo za omogočanje omejevanja hitrosti zahtev v kontekstih HTTP, strežnika in lokacije. Kot parameter vzame pomnilniško območje in druge neobvezne parametre.
limit_req cona=limitreqsbyaddr;
Naslednji primer konfiguracije prikazuje omejevanje stopnje zahteve za API spletne aplikacije. Velikost skupnega pomnilnika je 20 MB, omejitev hitrosti zahtev pa je 10 zahtev na sekundo.
upstream api_service { strežnik 127.0.0.1:9051; strežnik 10.1.1.77:9052; } limit_req_zone $binary_remote_addr zone=limitreqsbyaddr: hitrost 20m=10r/s;limit_req_status 429; strežnik { poslušaj 80; ime_strežnika testapp.tecmint.com; root /var/www/html/testapp.tecmint.com/build; indeks index.html; #include snippets/error_pages.conf; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; lokacija / { try_files $uri $uri/ /index.html =404 =403 =500; } lokacija /api { limit_req cona=limitregsbyaddr;proxy_pass http://api_service; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-Za $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Nadgradnja $http_upgrade; proxy_set_header Povezava "nadgradnja"; } }
Shranite konfiguracijsko datoteko in jo zaprite.
Nato preverite, če je NGINX konfiguracijska sintaksa je pravilna z naslednjim ukazom:
$ sudo nginx -t.
Po tem ponovno naložite NGINX storitev uporabi zadnje spremembe:
$ sudo systemctl znova naloži nginx.
Ko je meja stopnje 10 zahtev na sekundo preseže en sam odjemalec, ki dostopa /api/
, NGINX vrne "429 Preveč zahtev” napaka odjemalcu.
Dogodek zabeleži tudi v dnevnik napak.
2022/04/29 00:30:38 [napaka] 3145846#0: *131039 omejitve zahtev, presežek: 0,990 po coni "limitreqsbyaddr", odjemalec: 192.168.1.10, strežnik: testapp.tecmint.com, zahteva: "GET /api/v1/app/meta-data HTTP/1.1", gostitelj: "testapp.tecmint.com", napotnik: " https://testapp.tecmint.com/"
Včasih bo moral odjemalec, odvisno od narave vaše aplikacije ali API-ja, vložiti veliko zahtev hkrati, nato pa za nekaj časa zmanjšati svojo stopnjo, preden naredi več. NGINX lahko tudi medpomni vse presežne zahteve v čakalni vrsti in jih takoj obdela.
To vedenje lahko omogočite pri omejevanju hitrosti z uporabo izbruh
parameter z omejitev_req
direktivo. Če želite omogočiti čakalno vrsto brez zamude, dodajte vozlišče
parameter.
limit_req cona=limitregsbyaddr burst=20 nodelay;
Obstaja težava z omejevanjem hitrosti na podlagi odjemalčevega IP-ja, zlasti za uporabnike, ki dostopajo do vaše aplikacije iz istega omrežja in delujejo za NAT. V tem primeru bodo vse njihove zahteve izvirale z istega naslova IP. V takem scenariju lahko uporabite druge spremenljivke za prepoznavanje strank, kot je piškotek seje.
Za več informacij o omejevanju števila zahtev si oglejte to Omejitev hitrosti NGINX na spletni strani NGINX. Nato bomo obravnavali, kako omejiti uporabo pasovne širine NGINX.