Kif tillimita r-Rata ta' Konnessjonijiet (Talbiet) f'NGINX
Fl-aħħar artiklu tagħna li huwa parti mis-serje tagħna ta 'ġestjoni tat-traffiku NGINX, iddiskutejna kif nillimitaw in-numru ta' konnessjonijiet f'NGINX. F'din il-gwida, se nħarsu lejn kif nillimitaw ir-rata ta 'talbiet f'NGINX.
Il-limitazzjoni tar-rata hija teknika ta’ ġestjoni tat-traffiku użata biex tirrestrinġi n-numru ta’ talbiet HTTP li klijent jista’ jagħmel f’perjodu ta’ żmien partikolari – il-limiti tar-rata huma kkalkulati f’Talbiet Per Sekondi (jew RPS).
Eżempju ta' talba huwa talba GET għall-paġna ta' login ta' applikazzjoni jew talba POST fuq formola ta' login jew POST fuq endpoint tal-API.
Hemm ħafna raġunijiet biex tiġi limitata r-rata ta' talbiet għall-applikazzjonijiet tal-web jew is-servizzi tal-API tiegħek, waħda hija s-sigurtà: il-protezzjoni minn talbiet rapidi abbużivi.
Limitazzjoni tar-Rata ta' Konnessjonijiet f'NGINX
Ibda billi tiddefinixxi l-parametri għal-limitazzjoni tar-rata billi tuża d-direttiva limit_req_zone
. Il-parametri meħtieġa huma ċavetta għall-identifikazzjoni tal-klijenti, żona ta 'memorja kondiviża li se taħżen l-istat taċ-ċavetta u kemm-il darba tkun aċċessat URL ristrett għal talba, u r-rata.
Id-direttiva limit_req_zone
hija valida fil-kuntest HTTP.
limit_req_zone $binary_remote_addr zone=limitreqsbyaddr:20m rate=10r/s;
Ukoll, issettja kodiċi tal-istatus tar-rispons li jiġi rritornat għal talbiet miċħuda, billi tuża d-direttiva limit_req_status
li hija valida fil-kuntesti HTTP, sever u post.
limit_req_status 429;
Issa tista' tuża d-direttiva limint_conn
biex tippermetti l-limitazzjoni tar-rata tat-talba fil-kuntesti HTTP, sever u post. Huwa jieħu żona tal-memorja bħala parametru u parametri oħra fakultattivi.
limit_req zone=limitreqsbyaddr;
L-eżempju ta' konfigurazzjoni li ġej juri li r-rata ta' talba tiġi limitata għal API ta' applikazzjoni tal-web. Id-daqs tal-memorja kondiviża huwa 20 MB u l-limitu tar-rata tat-talba huwa 10 talbiet kull sekonda.
upstream api_service { server 127.0.0.1:9051; server 10.1.1.77:9052; } limit_req_zone $binary_remote_addr zone=limitreqsbyaddr:20m rate=10r/s; limit_req_status 429; server { listen 80; server_name testapp.linux-console.net; root /var/www/html/testapp.linux-console.net/build; index index.html; #include snippets/error_pages.conf; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; location / { try_files $uri $uri/ /index.html =404 =403 =500; } location /api { limit_req zone=limitreqsbyaddr; proxy_pass http://api_service; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
Issejvja l-fajl tal-konfigurazzjoni tiegħek u agħlaq.
Imbagħad iċċekkja jekk is-sintassi tal-konfigurazzjoni NGINX hijiex korretta billi tuża l-kmand li ġej:
$ sudo nginx -t
Wara dan, reload is-servizz NGINX applika l-aħħar bidliet:
$ sudo systemctl reload nginx
Ladarba l-limitu tar-rata ta' 10 talbiet kull sekonda jinqabeż minn klijent wieħed li jaċċessa /api/
, NGINX jirritorna żball \429 Wisq talbiet” lill-klijent.
Jirreġistra wkoll l-inċident fil-ġurnal tal-iżbalji.
2022/04/29 00:30:38 [error] 3145846#0: *131039 limiting requests, excess: 0.990 by zone "limitreqsbyaddr", client: 192.168.1.10, server: testapp.linux-console.net, request: "GET /api/v1/app/meta-data HTTP/1.1", host: "testapp.linux-console.net", referrer: "https://testapp.linux-console.net/"
Xi drabi skont in-natura tal-applikazzjoni jew tal-API tiegħek, klijent ikollu jagħmel ħafna talbiet kollha f'daqqa, u mbagħad inaqqas ir-rata tiegħu għal perjodu ta 'żmien qabel ma jagħmel aktar. NGINX jista 'wkoll ibaffera kwalunkwe talba żejda fi kju u jipproċessahom fil-pront.
Tista' tattiva din l-imġieba fil-limitazzjoni tar-rata billi tuża l-parametru burst
bid-direttiva limit_req
. Biex tippermetti l-kju mingħajr dewmien, żid il-parametru nodelay
.
limit_req zone=limitreqsbyaddr burst=20 nodelay;
Hemm tfixkil bil-limitazzjoni tar-rata bbażata fuq l-IP tal-klijent, partikolarment għall-utenti li jaċċessaw l-applikazzjoni tiegħek mill-istess netwerk u joperaw wara NAT. F'dan il-każ, it-talbiet kollha tagħhom joriġinaw mill-istess indirizz IP. F'xenarju bħal dan, tista' tuża varjabbli oħra biex tidentifika klijenti bħal cookie tas-sessjoni.
Għal aktar informazzjoni dwar il-limitazzjoni tar-rata tat-talbiet, iċċekkja din il-limitazzjoni tar-rata NGINX fuq il-websajt NGINX. Sussegwentement, għandna nkopru kif nillimitaw l-użu tal-bandwidth f'NGINX.