Giunsa Limitahan ang Gidaghanon sa Koneksyon (Mga Pangayo) sa NGINX


Nagpadala ang NGINX nga adunay lainlaing mga module aron tugutan ang mga tiggamit nga makontrol ang trapiko sa ilang mga website, aplikasyon sa web, ingon man uban pang mga kapanguhaan sa web. Usa sa mga mahinungdanong rason sa paglimite sa trapiko o pag-access mao ang pagpugong sa mga pag-abuso o pag-atake sa pipila ka mga matang sama sa pag-atake sa DoS (Denial of Service).

Adunay tulo ka dagkong paagi sa paglimit sa paggamit o trapiko sa NGINX:

  1. Gilimitahan ang gidaghanon sa mga koneksyon (mga hangyo).
  2. Gilimitahan ang rate sa mga hangyo.
  3. Gilimitahan ang bandwidth.

Ang mga pamaagi sa pagdumala sa trapiko sa NGINX sa ibabaw, depende sa kaso sa paggamit mahimong ma-configure aron limitahan base sa usa ka gipiho nga yawe, ang labing kasagaran mao ang IP address sa kliyente. Gisuportahan usab sa NGINX ang ubang mga variable sama sa cookie sa sesyon ug daghan pa.

Niining una nga bahin sa among tulo ka bahin nga serye, among hisgutan kung giunsa ang paglimite sa gidaghanon sa mga koneksyon sa NGINX aron mapanalipdan ang imong mga website/aplikasyon.

  • Unsaon Limitahan ang Gidaghanon sa Koneksyon (Mga Pangayo) sa NGINX – Bahin 1
  • Unsaon Limitahan ang Rate sa mga Koneksyon (Mga Pangayo) sa NGINX – Bahin 2
  • Unsaon Limitahan ang Paggamit sa Bandwidth sa NGINX – Bahin 3

Hinumdomi nga ang NGINX magkonsiderar sa usa ka koneksyon alang sa paglimit lamang kung kini adunay usa ka hangyo nga giproseso sa server ug ang tibuok nga header sa hangyo nabasa na. Busa, dili tanan nga koneksyon sa kliyente maihap.

Limitahan ang Gidaghanon sa Koneksyon sa NGINX

Una, kinahanglan nimo nga ipasabut ang usa ka gipaambit nga memory zone nga nagtipig sa mga sukatan sa koneksyon alang sa lainlaing mga yawe, gamit ang direktiba nga limit_conn_zone. Sama sa gihisgutan kaniadto, ang usa ka yawe mahimong usa ka teksto, usa ka variable sama sa hilit nga IP address sa kliyente, o kombinasyon sa duha.

Kini nga direktiba nga balido sulod sa konteksto sa HTTP nagkinahanglan og duha ka mga parameter: ang yawe ug ang sona (sa pormat nga zone_name: gidak-on).

limit_conn_zone $binary_remote_addr zone=limitconnbyaddr:20m;

Para magbutang ug response status code nga ibalik sa gisalikway nga mga hangyo, gamita ang limit_conn_status direktiba nga nagkuha ug HTTP status code isip parameter. Kini balido sulod sa HTTP, server, ug konteksto sa lokasyon.

limit_conn_status 429;

Aron limitahan ang mga koneksyon, gamita ang limint_conn nga direktiba aron itakda ang memory zone nga gamiton ug ang maximum nga gidaghanon sa gitugotan nga mga koneksyon sama sa gipakita sa mosunod nga snippet sa configuration. Kini nga direktiba balido sulod sa HTTP, server, ug konteksto sa lokasyon.

limit_conn   limitconnbyaddr  50;

Ania ang kompleto nga configuration:

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;

    limit_conn   limitconnbyaddr  50;

    #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 {
        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";
   }
}

I-save ang file ug isira kini.

Dayon susiha kung maayo ba ang configuration sa NGINX pinaagi sa pagpadagan sa mosunod nga sugo:

$ sudo nginx -t

Sunod, i-reload ang serbisyo sa NGINX aron mahimo ang bag-ong mga pagbag-o:

$ sudo systemctl reload nginx

Pagsusi sa Nginx Connection Limit

Kung ang usa ka kliyente molapas sa labing kadaghan nga gitugotan nga mga koneksyon, ang NGINX nagbalik sa usa ka sayup nga \429 Daghan kaayo nga mga hangyo sa kliyente ug nagrehistro usa ka entry sama sa usa sa ubos sa file sa log sa sayup:

2022/03/15 00:14:00 [error] 597443#0: *127 limiting connections by zone "limitconnbyaddr", client: x.x.x.x, server: testapp.tecmimt.com, request: "GET /static/css/main.63fdefff.chunk.css.map HTTP/1.1", host: "testapp.tecmimt.com"

Limitahan ang Nginx nga Gidaghanon sa mga Koneksyon sa Aplikasyon

Mahimo usab nimong limitahan ang gidaghanon sa mga koneksyon alang sa gihatag nga server pinaagi sa paggamit sa variable nga $server_name:

upstream api_service {
    server 127.0.0.1:9051;
    server 10.1.1.77:9052;
}
limit_conn_zone $server_name zone=limitbyservers:10m;
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;

     limit_conn  limitbyservers  2000;

    #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 {
        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";
   }
}

Kini nga configuration makapahimo sa NGINX nga limitahan ang kinatibuk-ang gidaghanon sa mga koneksyon ngadto sa virtual server nga nagpalihok sa aplikasyon nga testapp.linux-console.net, ngadto sa 2000 ka koneksyon.

Mubo nga sulat: Ang paglimite sa mga koneksyon base sa IP sa usa ka kliyente adunay usa ka downside. Mahimo nimong pugngan ang mga koneksyon alang sa labaw pa sa usa ka tiggamit, labi na kung daghang mga tiggamit nga nag-access sa imong aplikasyon naa sa parehas nga network ug naglihok sa luyo sa usa ka NAT - ang tanan nila nga koneksyon maggikan sa parehas nga IP address.

Sa ingon nga senaryo, mahimo nimong magamit ang usa o daghang mga variable nga magamit sa NGINX nga makaila sa usa ka kliyente sa lebel sa aplikasyon, usa ka pananglitan usa ka cookie sa sesyon.

Mahimo usab nimo gusto ang mosunod nga mga artikulo nga may kalabutan sa Nginx:

  • Unsaon Paghimo sa Custom 404 Error Page sa NGINX
  • Unsaon Pagkontrol sa Access Base sa Client IP Address sa NGINX
  • Unsaon Pag-cache sa Content sa NGINX
  • Unsaon Pag-enable ang HTTP/2.0 sa Nginx
  • Unsaon Paggamit ang Nginx isip HTTP Load Balancer sa Linux

Mao na sa pagkakaron! Sa sunod nga bahin niini nga serye, atong hisgotan ang laing mapuslanong pamaagi sa pagdumala sa trapiko sa NGINX – paglimite sa gidaghanon sa mga hangyo. Hangtud niana, magpabilin uban kanamo.