Giunsa ang Limitahan ang Bandwidth sa Network sa NGINX Web Server


Kaniadto, sa among NGINX traffic management ug security controls series, among nahisgutan kung giunsa paglimite ang rate sa mga hangyo (limitahan ang rate kung diin ang usa ka kliyente makahimo mga hangyo) para sa imong mga kapanguhaan sa web.

Aron masiguro nga ang bandwidth sa paggamit sa imong aplikasyon dili magasto sa usa ka kliyente, kinahanglan nimo nga kontrolon ang katulin sa pag-upload ug pag-download matag kliyente. Kini usa ka komon nga kontrol sa seguridad sa NGINX batok sa mga pag-atake sa DoS (Denial of Service) gikan sa mga malisyosong tiggamit nga naningkamot lang sa pag-abuso sa performance sa site.

Niining ikatulo nga bahin sa serye, among ipasabut kung giunsa ang paglimite sa bandwidth sa network sa NGINX web server.

Limitahan ang Bandwidth sa NGINX

Aron limitahan ang bandwidth sa NGINX, gamita ang limit_rate nga direktiba nga naglimite sa rate sa pagpadala sa tubag sa usa ka kliyente. Balido kini sa HTTP, server, lokasyon, ug kung pahayag sulod sa block sa lokasyon, ug gipiho niini ang limitasyon sa rate alang sa gihatag nga konteksto sa bytes matag segundo nga default. Mahimo usab nimo gamiton ang m para sa megabytes o g alang sa gigabytes.

limit_rate 20k;

Ang laing may kalabutan nga direktiba mao ang limit_rate_after, nga nagtino nga ang koneksyon dili kinahanglan nga limitahan sa rate hangtod nga mabalhin ang usa ka piho nga kantidad sa datos. Kini nga direktiba mahimong ibutang sa HTTP, server, lokasyon, ug \kon pahayag sulod sa block sa lokasyon.

limit_rate_after 500k;

Ania ang usa ka pananglitan nga pag-configure aron limitahan ang usa ka kliyente nga mag-download sa sulud pinaagi sa usa ka koneksyon sa labing taas nga tulin nga 20 kilobytes matag segundo.

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

Kung nadugang na nimo ang gikinahanglan nga mga setting nga gipatin-aw sa ibabaw, i-save ang mga pagbag-o ug isira ang file. Pagkahuman, susiha kung ang NGINX configuration syntax husto, sama niini:

$ sudo nginx -t

Kung OK ra ang tanan, i-reload ang serbisyo sa NGINX aron mabuhat ang labing bag-ong mga pagbag-o:

$ sudo systemctl reload nginx

Limitahan ang Bandwidth ug Gidaghanon sa Koneksyon sa NGINX

Uban sa pag-configure sa ibabaw, ang kliyente makaabli sa daghang mga koneksyon aron madugangan ang bandwidth. Busa, dugang pa, mahimo nimong limitahan ang mga koneksyon matag kliyente gamit ang usa ka parameter sama sa usa ka IP address sama sa among gitan-aw kaniadto.

Pananglitan, mahimo nimong limitahan ang usa ka koneksyon matag IP address.

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

Limitahan ang Bandwidth nga Dinamikong sa NGINX

Isip usa ka parameter nga bili sa limit_rate nga direktiba, mahimo nimong itakda ang mga variable aron dinamikong limitahan ang bandwidth. Labi na nga mapuslanon kini sa mga sitwasyon diin ang rate kinahanglan nga limitado depende sa usa ka piho nga kondisyon.

Sa kini nga pananglitan, gigamit namon ang block sa mapa. Kini nakapahimo kanimo sa paghimo og bag-ong variable kansang bili nagdepende sa mga bili sa usa o labaw pa sa orihinal nga mga variable ($hinay ug $limit_rate) nga gitakda sa unang parameter.

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

Ania ang laing sample nga panig-ingnan sa pag-configure aron ihulagway ang dinamikong paglimit sa bandwidth sa NGINX. Kini nga configuration makahimo sa NGINX nga limitahan ang bandwidth base sa TLS nga bersyon. Ang direktiba nga limit_rate_after 512 nagpasabot sa limit rate human ipadala ang mga ulohan.

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

Mao ra kana ang among naa kanimo sa kini nga bahin sa serye. Magpadayon kami sa pagtabon sa daghang mga hilisgutan bahin sa pagdumala sa trapiko ug pagkontrol sa seguridad sa NGINX. Apan sama sa naandan, mahimo kang mangutana o ipaambit ang imong mga hunahuna niini nga giya pinaagi sa feedback form sa ubos.

Reperensya: giya sa pagkontrol sa seguridad sa website sa NGINX.