Korábban a miénkben NGINX forgalomirányítási és biztonsági ellenőrzések sorozatban megbeszéltük, hogyan kell korlátozza a kapcsolatok számát ugyanaz a kliens képes a webes erőforrásokhoz is hozzáadni az ügyfélazonosító paramétereket, például az IP-címet. Kitértünk arra is, hogyan kell korlátozza a kérelmek arányát (korlátozza azt a sebességet, amellyel az ügyfél kérelmeket tehet) a webes erőforrásokhoz.
Annak biztosítása érdekében, hogy az alkalmazáshasználati sávszélességet egyetlen ügyfél ne használja fel, ügyfelenként kell szabályoznia a fel- és letöltési sebességet. Ez gyakori NGINX elleni biztonsági ellenőrzés DoS (Szolgáltatás megtagadása) olyan rosszindulatú felhasználók támadásai, akik csak visszaélni próbálnak a webhely teljesítményével.
A sorozat e harmadik részében elmagyarázzuk, hogyan lehet korlátozni a hálózati sávszélességet NGINX web szerver.
A sávszélesség korlátozásához NGINX, használja a limit_rate direktíva, amely korlátozza a válaszadás sebességét az ügyfél felé. Érvényes a
HTTP, szerver, elhelyezkedés, és ha nyilatkozat belül a elhelyezkedés blokkot, és alapértelmezés szerint egy adott környezet sebességkorlátját adja meg bájt per másodpercben. Használhatod is m megabájtokhoz ill g gigabájtért.limit_rate 20k;
Egy másik kapcsolódó irányelv az limit_rate_after, amely meghatározza, hogy a kapcsolat csak meghatározott mennyiségű adat átvitele után legyen sebességkorlátozott. Ez a direktíva beállítható a HTTP-ben, a szerverben, a helyben és az „if utasításban egy helyblokkon belül”.
limit_rate_after 500k;
Íme egy példa konfigurációs példa arra, hogy egy kliens egyetlen kapcsolaton keresztül legfeljebb 20 kilobájt/másodperc sebességgel töltsön le tartalmat.
upstream api_service { szerver 10.1.1.10:9051; szerver 10.1.1.77:9052; } szerver { figyelj 80; szerver_neve testapp.tecmint.com; root /var/www/html/testapp.tecmint.com/build; index index.html; hely / { try_files $uri $uri/ /index.html =404 =403 =500; } hely /api { proxy_pass http://api_service; proxy_set_header X-Real-IP $ távoli_cím; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_verzió 1.1; proxy_set_header Frissítés $http_upgrade; proxy_set_header Connection "upgrade"; } hely /dokumentumok { limit_rate 20k; limit_rate_after 500k; } }
Miután megadta a fent ismertetett szükséges beállításokat, mentse el a változtatásokat, és zárja be a fájlt. Ezt követően ellenőrizze, hogy a NGINX a konfigurációs szintaxis helyes, például:
$ sudo nginx -t.
Ha minden rendben van, töltse be újra NGINX szolgáltatás a legújabb változtatások érvénybe lépéséhez:
$ sudo systemctl reload nginx.
A fenti konfigurációval a kliens több kapcsolatot is megnyithat a sávszélesség növelése érdekében. Ezért ezenkívül korlátozhatja a kapcsolatokat kliensenként olyan paraméterek használatával, mint például az IP-cím, ahogy azt korábban megvizsgáltuk.
Például korlátozhat egy kapcsolatot IP-címenként.
upstream api_service { szerver 127.0.0.1:9051; szerver 10.1.1.77:9052; } limit_conn_zone $binary_remote_addr zone=limitconnbyaddr: 20m; limit_conn_status 429; szerver { figyelj 80; szerver_neve testapp.tecmint.com; root /var/www/html/testapp.tecmint.com/build; index index.html; hely / { try_files $uri $uri/ /index.html =404 =403 =500; } hely /api { limit_conn limitconnbyaddr 5; proxy_pass http://api_service; proxy_set_header X-Real-IP $ távoli_cím; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_verzió 1.1; proxy_set_header Frissítés $http_upgrade; proxy_set_header Connection "upgrade"; } hely /dokumentumok { limit_rate 50k; limit_rate_after 500k; limit_conn limitconnbyaddr 1; } }
Paraméterértékként a limit_rate direktíva szerint változókat adhat meg a sávszélesség dinamikus korlátozásához. Különösen hasznos olyan helyzetekben, amikor az arányt bizonyos körülményektől függően korlátozni kell.
Ebben a példában a térképblokkot használjuk. Lehetővé tette egy új változó létrehozását, amelynek értéke egy vagy több eredeti változó értékétől függ ($lassú és $limit_rate) az első paraméterben megadott.
upstream api_service { szerver 10.1.1.10:9051; szerver 10.1.1.77:9052; } térkép $lassú $limit_rate { 1 20k; 2 30k; } szerver { figyelj 80; szerver_neve testapp.tecmint.com; root /var/www/html/testapp.tecmint.com/build; index index.html; hely / { try_files $uri $uri/ /index.html =404 =403 =500; } hely /api { proxy_pass http://api_service; proxy_set_header X-Real-IP $ távoli_cím; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_verzió 1.1; proxy_set_header Frissítés $http_upgrade; proxy_set_header Connection "upgrade"; } hely /dokumentumok { limit_rate $limit_rate; limit_rate_after 500k; } }
Íme egy másik példa konfigurációs példa az NGINX sávszélesség dinamikus korlátozásának bemutatására. Ez a konfiguráció lehetővé teszi az NGINX számára, hogy korlátozza a sávszélességet a TLS-verzió alapján. Az irányelv limit_rate_after 512 a fejlécek elküldése utáni limitarányt jelenti.
upstream api_service { szerver 10.1.1.10:9051; szerver 10.1.1.77:9052; } map $ssl_protocol $response_rate { "TLSv1.1" 50k; "TLSv1.2" 100k; "TLSv1.3" 500k; } szerver { figyelj 443 ssl; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_certificate /etc/ssl/testapp.crt; ssl_certificate_key /etc/ssl/testapp.key; hely / { limit_rate $response_rate; # Korlátozza a sávszélességet a TLS-verzió alapján limit_rate_after 512; proxy_pass http://api_service; } }
Ez minden, amit a sorozat ezen részében kaptunk. Továbbra is további témákkal foglalkozunk NGINX forgalomirányítás és biztonsági ellenőrzések. De szokás szerint az alábbi visszajelzési űrlapon keresztül kérdéseket tehet fel, vagy megoszthatja gondolatait ezzel az útmutatóval kapcsolatban.
Referencia: biztonsági ellenőrzési útmutató az NGINX honlapján.