Kif tillimita n-numru ta 'Konnessjonijiet (Talbiet) f'NGINX


NGINX jintbagħat b'diversi moduli biex jippermettu lill-utenti jikkontrollaw it-traffiku lejn il-websajts tagħhom, l-applikazzjonijiet tal-web, kif ukoll riżorsi oħra tal-web. Waħda mir-raġunijiet ewlenin biex jiġi limitat it-traffiku jew l-aċċess hija li jiġu evitati abbużi jew attakki ta’ ċerti tipi bħal attakki DoS (Denial of Service).

Hemm tliet modi ewlenin kif tillimita l-użu jew it-traffiku f'NGINX:

  1. Li jillimitaw in-numru ta' konnessjonijiet (talbiet).
  2. Li jillimitaw ir-rata tat-talbiet.
  3. Li jillimitaw il-wisa' tal-frekwenza.

L-approċċi ta 'ġestjoni tat-traffiku NGINX ta' hawn fuq, skont il-każ tal-użu jistgħu jiġu kkonfigurati biex jillimitaw abbażi ta 'ċavetta definita, l-aktar komuni jkun l-indirizz IP tal-klijent. NGINX jappoġġja wkoll varjabbli oħra bħal cookie tas-sessjoni u ħafna aktar.

F'din l-ewwel parti tas-serje ta 'tliet partijiet tagħna, aħna ser niddiskutu kif nillimitaw in-numru ta' konnessjonijiet f'NGINX biex nissalvagwardjaw il-websajts/applikazzjonijiet tiegħek.

  • Kif tillimita n-numru ta' Konnessjonijiet (Talbiet) f'NGINX – Parti 1
  • Kif tillimita r-Rata ta' Konnessjonijiet (Talbiet) f'NGINX – Parti 2
  • Kif tillimita l-użu tal-bandwidth f'NGINX – Parti 3

Żomm f'moħħok li NGINX jikkunsidra konnessjoni għal-limitazzjoni biss jekk ikollu talba li tkun qed tiġi pproċessata mis-server u l-header kollu tat-talba diġà jkun inqara. Għalhekk, mhux il-konnessjonijiet tal-klijenti kollha jingħaddu.

Limitazzjoni tan-Numru ta' Konnessjonijiet f'NGINX

L-ewwel, għandek bżonn tiddefinixxi żona ta 'memorja kondiviża li taħżen metriċi ta' konnessjoni għal diversi ċwievet, billi tuża d-direttiva limit_conn_zone. Kif issemma qabel, ċavetta tista 'tkun test, varjabbli bħall-indirizz IP remot ta' klijent, jew kombinazzjoni tat-tnejn.

Din id-direttiva li hija valida fil-kuntest HTTP tieħu żewġ parametri: iċ-ċavetta u ż-żona (fil-format isem_zona:daqs).

limit_conn_zone $binary_remote_addr zone=limitconnbyaddr:20m;

Biex tissettja kodiċi tal-istatus tar-rispons li jintbagħat lura għal talbiet miċħuda, uża d-direttiva limit_conn_status li tieħu kodiċi tal-istatus HTTP bħala parametru. Huwa validu fil-kuntesti HTTP, server, u post.

limit_conn_status 429;

Biex tillimita l-konnessjonijiet, uża d-direttiva limint_conn biex tissettja ż-żona tal-memorja li għandha tintuża u n-numru massimu ta’ konnessjonijiet permessi kif muri fis-snippet tal-konfigurazzjoni li ġej. Din id-direttiva hija valida fi ħdan il-kuntesti HTTP, server, u post.

limit_conn   limitconnbyaddr  50;

Hawnhekk hawn il-konfigurazzjoni kompleta:

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

Issejvja l-fajl u agħlaqha.

Imbagħad iċċekkja jekk il-konfigurazzjoni NGINX hijiex tajba billi tħaddem il-kmand li ġej:

$ sudo nginx -t

Sussegwentement, iċċarġja mill-ġdid is-servizz NGINX biex taffettwa l-bidliet riċenti:

$ sudo systemctl reload nginx

Iċċekkjar tal-Limitu tal-Konnessjoni Nginx

Meta klijent jaqbeż in-numru massimu ta' konnessjonijiet permessi, NGINX jirritorna żball \429 Wisq talbiet” lill-klijent u jirreġistra dħul bħal dak ta' hawn taħt fil-fajl log tal-iżbalji:

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"

Illimitazzjoni tan-Nginx Numru ta 'Konnessjonijiet għall-Applikazzjoni

Tista 'wkoll tillimita n-numru ta' konnessjonijiet għal server partikolari billi tuża l-varjabbli $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";
   }
}

Din il-konfigurazzjoni tippermetti lil NGINX biex tillimita n-numru totali ta 'konnessjonijiet għas-server virtwali li jħaddem l-applikazzjoni testapp.linux-console.net, għal 2000 konnessjoni.

Nota: Il-limitazzjoni tal-konnessjonijiet ibbażati fuq l-IP ta 'klijent għandha żvantaġġ. Tista' tispiċċa tirrestrinġi l-konnessjonijiet għal aktar minn utent wieħed biss, speċjalment jekk ħafna utenti li jaċċessaw l-applikazzjoni tiegħek huma fuq l-istess netwerk u joperaw wara NAT - il-konnessjonijiet kollha tagħhom joriġinaw mill-istess indirizz IP.

F'xenarju bħal dan, tista 'timpjega waħda jew aktar varjabbli disponibbli f'NGINX li jistgħu jidentifikaw klijent fil-livell ta' applikazzjoni, eżempju huwa cookie tas-sessjoni.

Tista' wkoll tħobb l-artikoli relatati ma' Nginx li ġejjin:

  • Kif Oħloq Paġna ta' Żball Custom 404 f'NGINX
  • Kif tikkontrolla l-aċċess Ibbażat fuq l-indirizz IP tal-Klijent f'NGINX
  • Kif Cache Kontenut f'NGINX
  • Kif Ippermetti HTTP/2.0 f'Nginx
  • Kif tuża Nginx bħala HTTP Load Balancer fil-Linux

Dak hu għalissa! Fil-parti li jmiss ta 'din is-serje, se niddiskutu teknika oħra utli ta' ġestjoni tat-traffiku f'NGINX - tillimita r-rata ta 'talbiet. Sa dakinhar, żomm magħna.