NGINX web serwerinde tor giňligini nädip çäklendirmeli


Mundan ozal, NGINX ýol hereketini dolandyrmak we howpsuzlyk gözegçilik seriýamyzda, web çeşmeleriňiz üçin haýyşlaryň tizligini nädip çäklendirip boljakdygyny (müşderiniň talap edip biljek derejesini çäklendirip) ara alyp maslahatlaşdyk.

Programmanyň ulanylyş zolagynyň bir müşderiniň sarp etmeýändigine göz ýetirmek üçin bir müşderi üçin ýüklemek we göçürip almak tizligini gözegçilikde saklamaly. Bu, diňe saýtyň işleýşinden hyýanatçylykly peýdalanýan zyýanly ulanyjylaryň DoS (Hyzmatdan ýüz öwürmek) hüjümlerine garşy umumy NGINX howpsuzlyk gözegçiligi.

Tapgyryň bu üçünji bölüminde, NGINX web serwerinde toruň giňligini nädip çäklendirmelidigini düşündireris.

NGINX-de geçirijilik giňligini çäklendirmek

NGINX-de geçirijilik giňligini çäklendirmek üçin, müşderä jogap beriş tizligini çäklendirýän limit_rate direktiwasyny ulanyň. Ol HTTP-de, serwerde, ýerleşýän ýerinde we bir ýer blokynyň içinde jümle bar bolsa we belli bir kontekst üçin nyrh çägini sekuntda baýtda kesgitleýär. Megabaýt üçin m ýa-da gigabaýt üçin g ulanyp bilersiňiz.

limit_rate 20k;

Anotherene bir baglanyşykly görkezme, belli bir mukdarda maglumat geçirilýänçä baglanyşygyň çäkli bolmaly däldigini kesgitleýän limit_rate_afterdir. Bu direktiwany HTTP, serwerde, ýerleşişde we\ýerleşiş blokynyň içinde beýannama düzüp bolýar.

limit_rate_after 500k;

Ine, bir müşderiniň sekuntda iň ýokary 20 kilobaýt tizlik bilen bir baglanyşyk arkaly mazmuny göçürip almagyny çäklendirmek üçin mysal konfigurasiýasy.

upstream api_service {
    server 10.1.1.10:9051;
    server 10.1.1.77:9052;
}

server {
    listen 80;
    server_name testapp.linux-console.net;
    root /var/www/html/testapp.linux-console.net/build;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html =404 =403 =500;
    }
    location /api {
        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";

       
   }
   location /documents {
        limit_rate 20k;
        limit_rate_after 500k;  
}
}

Aboveokarda düşündirilen zerur sazlamalary goşanyňyzdan soň, üýtgeşmeleri ýazdyryň we faýly ýapyň. Ondan soň, NGINX konfigurasiýa sintaksisiniň dogrudygyny barlaň:

$ sudo nginx -t

Allhli zat gowy bolsa, soňky üýtgeşmeleri amala aşyrmak üçin NGINX hyzmatyny täzeden açyň:

$ sudo systemctl reload nginx

NGINX-de geçirijilik giňligini we birikmeleriň sanyny çäklendirmek

Aboveokardaky konfigurasiýa bilen, müşderi geçirijilik giňligini ýokarlandyrmak üçin birnäçe baglanyşyk açyp biler. Şonuň üçin goşmaça, ozal seredişimiz ýaly IP adresi ýaly parametr ulanyp, bir müşderi üçin birikmeleri çäklendirip bilersiňiz.

Mysal üçin, her IP adresi üçin bir baglanyşygy çäklendirip bilersiňiz.

upstream api_service {
    server 127.0.0.1:9051;
    server 10.1.1.77:9052;
}

limit_conn_zone $binary_remote_addr zone=limitconnbyaddr:20m;
limit_conn_status 429;

server {
    listen 80;
    server_name testapp.linux-console.net;
    root /var/www/html/testapp.linux-console.net/build;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html =404 =403 =500;
    }
    location /api {
        limit_conn   limitconnbyaddr  5;

        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";

       
   }
   location  /documents {
        limit_rate 50k;
        limit_rate_after 500k;  
        limit_conn   limitconnbyaddr  1;
}
}

Zolak giňligini çäklendirmek NGINX-de dinamiki

Limit_rate direktiwasynyň parametr bahasy hökmünde, geçirijilik giňligini dinamiki çäklendirmek üçin üýtgeýjileri kesgitläp bilersiňiz. Belli bir şerte baglylykda nyrh çäklendirilmeli ýagdaýlarda aýratyn peýdalydyr.

Bu mysalda, karta blokuny ulanýarys. Bu, birinji parametrde görkezilen asyl üýtgeýjileriň ($haýal we $limit_rate) bahalaryna bagly bolan täze üýtgeýjini döretmäge mümkinçilik berdi.

upstream api_service {
    server 10.1.1.10:9051;
    server 10.1.1.77:9052;
}

map $slow $limit_rate {
    1     20k;
    2     30k;
}

server {
    listen 80;
    server_name testapp.linux-console.net;
    root /var/www/html/testapp.linux-console.net/build;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html =404 =403 =500;
    }
    location /api {
        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";
   }
   location /documents {
        limit_rate $limit_rate;
        limit_rate_after 500k;
}
}

Ine, NGINX-de geçirijilik giňliginiň dinamiki çäklendirilmegini görkezmek üçin başga bir nusga konfigurasiýa mysaly. Bu konfigurasiýa NGINX-a TLS wersiýasy esasynda geçiriş giňligini çäklendirmäge mümkinçilik berýär. Limit_rate_after 512 görkezmesi sözbaşylar iberilenden soň çäk derejesini aňladýar.

upstream api_service {
    server 10.1.1.10:9051;
    server 10.1.1.77:9052;
}

map $ssl_protocol $response_rate {
    "TLSv1.1" 50k;
    "TLSv1.2" 100k;
    "TLSv1.3" 500k;
}

server {
    listen 443 ssl;
    ssl_protocols       TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_certificate     /etc/ssl/testapp.crt;
    ssl_certificate_key   /etc/ssl/testapp.key;

    location / {
        limit_rate       $response_rate; # Limit bandwidth based on TLS version
        limit_rate_after 512;
        proxy_pass       http://api_service;
    }
}

Bu seriýanyň bu bölüminde siziň üçin bar zat. NGINX ýol hereketini dolandyrmak we howpsuzlyk gözegçiligi bilen baglanyşykly has köp mowzugy dowam etdireris. Usualöne adatdakysy ýaly aşakdaky jogap formasy arkaly sorag berip ýa-da bu gollanma baradaky pikirleriňizi paýlaşyp bilersiňiz.

Salgylanma: NGINX web sahypasyndaky howpsuzlyk gözegçilik gollanmasy.