Hvernig á að takmarka netbandbreidd í NGINX vefþjóni


Áður, í NGINX umferðarstjórnunar- og öryggisstýringarröðinni okkar, höfum við rætt hvernig eigi að takmarka hraða beiðna (takmarka hraðann sem viðskiptavinur getur lagt fram beiðnir á) fyrir vefauðlindir þínar.

Til að tryggja að bandbreidd forritsnotkunar þinnar sé ekki eytt af einum viðskiptavini þarftu að stjórna upphleðslu- og niðurhalshraða á hvern viðskiptavin. Þetta er algengt NGINX öryggiseftirlit gegn DoS (Denial of Service) árásum frá illgjarnum notendum sem eru bara að reyna að misnota frammistöðu vefsvæðisins.

Í þessum þriðja hluta seríunnar munum við útskýra hvernig á að takmarka netbandbreidd á NGINX vefþjóninum.

Takmörkun á bandbreidd í NGINX

Til að takmarka bandbreidd í NGINX, notaðu limit_rate tilskipunina sem takmarkar hraða svarsendingar til viðskiptavinar. Það er gilt í HTTP, miðlara, staðsetningu og if yfirlýsingunni innan staðsetningarblokkar og það tilgreinir sjálfgefið hraðamörk fyrir tiltekið samhengi í bætum á sekúndu. Þú getur líka notað m fyrir megabæt eða g fyrir gígabæt.

limit_rate 20k;

Önnur tengd tilskipun er limit_rate_after, sem tilgreinir að tengingin skuli ekki vera takmörkuð fyrr en eftir að ákveðið magn gagna hefur verið flutt. Þessa tilskipun er hægt að stilla í HTTP, miðlara, staðsetningu og if yfirlýsingu innan staðsetningarblokkar.

limit_rate_after 500k;

Hér er dæmi um stillingar til að takmarka viðskiptavin til að hlaða niður efni í gegnum eina tengingu á hámarkshraða 20 kílóbæti á sekúndu.

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

Þegar þú hefur bætt við nauðsynlegum stillingum sem lýst er hér að ofan skaltu vista breytingarnar og loka skránni. Eftir það skaltu athuga hvort setningafræði NGINX stillingar sé rétt, eins og svo:

$ sudo nginx -t

Ef allt er í lagi skaltu endurhlaða NGINX þjónustuna til að framkvæma nýjustu breytingarnar:

$ sudo systemctl reload nginx

Takmörkun á bandbreidd og fjölda tenginga í NGINX

Með ofangreindri uppsetningu getur viðskiptavinurinn opnað nokkrar tengingar til að auka bandbreidd. Þess vegna geturðu líka takmarkað tengingar á hvern viðskiptavin með því að nota færibreytu eins og IP tölu eins og við skoðuðum áður.

Til dæmis geturðu takmarkað eina tengingu á hverja IP tölu.

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

Takmarka bandbreidd á kraftmikinn hátt í NGINX

Sem færibreytugildi fyrir limit_rate tilskipunina geturðu tilgreint breytur til að takmarka bandbreidd á virkan hátt. Það er sérstaklega gagnlegt í aðstæðum þar sem hlutfall ætti að vera takmarkað eftir ákveðnu ástandi.

Í þessu dæmi erum við að nota kortablokkina. Það gerði þér kleift að búa til nýja breytu þar sem gildi hennar er háð gildum einnar eða fleiri af upprunalegu breytunum ($slow og $limit_rate) sem tilgreind eru í fyrstu færibreytunni.

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

Hér er annað dæmi um stillingar til að sýna kraftmikla takmörkun bandbreiddar í NGINX. Þessi uppsetning gerir NGINX kleift að takmarka bandbreidd byggt á TLS útgáfunni. Tilskipunin limit_rate_after 512 felur í sér takmörkunarhlutfallið eftir að hausar hafa verið sendir.

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

Það er allt sem við höfðum fyrir þig í þessum hluta seríunnar. Við munum halda áfram að fjalla um fleiri efni varðandi NGINX umferðarstjórnun og öryggiseftirlit. En eins og venjulega geturðu spurt spurninga eða deilt hugsunum þínum um þessa handbók í gegnum athugasemdaformið hér að neðan.

Tilvísun: öryggisstýringarleiðbeiningar á NGINX vefsíðunni.