NGINX വെബ് സെർവറിൽ നെറ്റ്uവർക്ക് ബാൻഡ്uവിഡ്ത്ത് എങ്ങനെ പരിമിതപ്പെടുത്താം


മുമ്പ്, ഞങ്ങളുടെ NGINX ട്രാഫിക് മാനേജ്uമെന്റ്, സെക്യൂരിറ്റി കൺട്രോൾ സീരീസിൽ, നിങ്ങളുടെ വെബ് ഉറവിടങ്ങൾക്കായുള്ള അഭ്യർത്ഥനകളുടെ നിരക്ക് (ഒരു ക്ലയന്റിന് അഭ്യർത്ഥനകൾ നടത്താൻ കഴിയുന്ന നിരക്ക് പരിമിതപ്പെടുത്തുക) എങ്ങനെ പരിമിതപ്പെടുത്താമെന്ന് ഞങ്ങൾ ചർച്ച ചെയ്തിട്ടുണ്ട്.

നിങ്ങളുടെ ആപ്ലിക്കേഷൻ ഉപയോഗ ബാൻഡ്uവിഡ്ത്ത് ഒരൊറ്റ ക്ലയന്റ് ചെലവഴിക്കുന്നില്ലെന്ന് ഉറപ്പാക്കാൻ, ഓരോ ക്ലയന്റിനും അപ്uലോഡ്, ഡൗൺലോഡ് വേഗത നിങ്ങൾ നിയന്ത്രിക്കേണ്ടതുണ്ട്. സൈറ്റ് പ്രകടനം ദുരുപയോഗം ചെയ്യാൻ ശ്രമിക്കുന്ന ക്ഷുദ്ര ഉപയോക്താക്കളിൽ നിന്നുള്ള DoS (സേവനം നിഷേധിക്കൽ) ആക്രമണങ്ങൾക്കെതിരായ ഒരു സാധാരണ NGINX സുരക്ഷാ നിയന്ത്രണമാണിത്.

സീരീസിന്റെ ഈ മൂന്നാം ഭാഗത്ത്, NGINX വെബ് സെർവറിൽ നെറ്റ്uവർക്ക് ബാൻഡ്uവിഡ്ത്ത് എങ്ങനെ പരിമിതപ്പെടുത്താമെന്ന് ഞങ്ങൾ വിശദീകരിക്കും.

NGINX-ൽ ബാൻഡ്uവിഡ്ത്ത് പരിമിതപ്പെടുത്തുന്നു

NGINX-ൽ ബാൻഡ്uവിഡ്ത്ത് പരിമിതപ്പെടുത്തുന്നതിന്, ഒരു ക്ലയന്റിലേക്കുള്ള പ്രതികരണ പ്രക്ഷേപണ നിരക്ക് പരിമിതപ്പെടുത്തുന്ന ലിമിറ്റ്_റേറ്റ് നിർദ്ദേശം ഉപയോഗിക്കുക. ഇത് HTTP, സെർവർ, ലൊക്കേഷൻ, ലൊക്കേഷൻ ബ്ലോക്കിനുള്ളിലെ if സ്റ്റേറ്റ്uമെന്റ് എന്നിവയിൽ സാധുതയുള്ളതാണ്, കൂടാതെ ഒരു നിശ്ചിത സന്ദർഭത്തിനുള്ള നിരക്ക് പരിധി ഡിഫോൾട്ടായി സെക്കൻഡിൽ ബൈറ്റുകളിൽ ഇത് വ്യക്തമാക്കുന്നു. നിങ്ങൾക്ക് മെഗാബൈറ്റിന് m അല്ലെങ്കിൽ ജിഗാബൈറ്റിന് g ഉപയോഗിക്കാം.

limit_rate 20k;

മറ്റൊരു അനുബന്ധ നിർദ്ദേശം limit_rate_after ആണ്, ഒരു നിശ്ചിത തുക ഡാറ്റ കൈമാറ്റം ചെയ്യപ്പെടുന്നതുവരെ കണക്ഷൻ നിരക്ക് പരിമിതപ്പെടുത്തരുത് എന്ന് ഇത് വ്യക്തമാക്കുന്നു. ഈ നിർദ്ദേശം HTTP, സെർവർ, ലൊക്കേഷൻ, \ഒരു ലൊക്കേഷൻ ബ്ലോക്കിനുള്ളിൽ if സ്റ്റേറ്റ്മെന്റ് എന്നിവയിൽ സജ്ജീകരിക്കാവുന്നതാണ്.

limit_rate_after 500k;

സെക്കൻഡിൽ പരമാവധി 20 കിലോബൈറ്റ് വേഗതയിൽ ഒരൊറ്റ കണക്ഷനിലൂടെ ഒരു ക്ലയന്റ് ഉള്ളടക്കം ഡൗൺലോഡ് ചെയ്യുന്നതിന് പരിമിതപ്പെടുത്തുന്നതിനുള്ള ഒരു ഉദാഹരണ കോൺഫിഗറേഷൻ ഇതാ.

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

മുകളിൽ വിശദീകരിച്ചിരിക്കുന്ന ആവശ്യമായ ക്രമീകരണങ്ങൾ നിങ്ങൾ ചേർത്തുകഴിഞ്ഞാൽ, മാറ്റങ്ങൾ സംരക്ഷിച്ച് ഫയൽ അടയ്ക്കുക. ശേഷം, NGINX കോൺഫിഗറേഷൻ സിന്റാക്സ് ശരിയാണോ എന്ന് പരിശോധിക്കുക.

$ sudo nginx -t

എല്ലാം ശരിയാണെങ്കിൽ, ഏറ്റവും പുതിയ മാറ്റങ്ങൾ വരുത്താൻ NGINX സേവനം വീണ്ടും ലോഡുചെയ്യുക:

$ sudo systemctl reload nginx

NGINX-ലെ ബാൻഡ്uവിഡ്ത്തും കണക്ഷനുകളുടെ എണ്ണവും പരിമിതപ്പെടുത്തുന്നു

മുകളിലെ കോൺഫിഗറേഷൻ ഉപയോഗിച്ച്, ബാൻഡ്uവിഡ്ത്ത് വർദ്ധിപ്പിക്കുന്നതിന് ക്ലയന്റിന് നിരവധി കണക്ഷനുകൾ തുറക്കാൻ കഴിയും. അതിനാൽ, കൂടാതെ, ഞങ്ങൾ മുമ്പ് നോക്കിയതുപോലെ ഒരു IP വിലാസം പോലുള്ള ഒരു പാരാമീറ്റർ ഉപയോഗിച്ച് നിങ്ങൾക്ക് ഓരോ ക്ലയന്റിനുമുള്ള കണക്ഷനുകൾ പരിമിതപ്പെടുത്താനും കഴിയും.

ഉദാഹരണത്തിന്, ഓരോ IP വിലാസത്തിലും നിങ്ങൾക്ക് ഒരു കണക്ഷൻ പരിമിതപ്പെടുത്താം.

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

NGINX-ൽ ചലനാത്മകമായി ബാൻഡ്uവിഡ്ത്ത് പരിമിതപ്പെടുത്തുന്നു

ലിമിറ്റ്_റേറ്റ് ഡയറക്uടീവിന്റെ ഒരു പാരാമീറ്റർ മൂല്യം എന്ന നിലയിൽ, ബാൻഡ്uവിഡ്ത്ത് ഡൈനാമിക്കായി പരിമിതപ്പെടുത്തുന്നതിന് നിങ്ങൾക്ക് വേരിയബിളുകൾ വ്യക്തമാക്കാൻ കഴിയും. ഒരു നിശ്ചിത വ്യവസ്ഥയെ ആശ്രയിച്ച് നിരക്ക് പരിമിതപ്പെടുത്തേണ്ട സാഹചര്യങ്ങളിൽ ഇത് പ്രത്യേകിച്ചും ഉപയോഗപ്രദമാണ്.

ഈ ഉദാഹരണത്തിൽ, ഞങ്ങൾ മാപ്പ് ബ്ലോക്ക് ഉപയോഗിക്കുന്നു. ആദ്യ പാരാമീറ്ററിൽ വ്യക്തമാക്കിയിട്ടുള്ള ഒന്നോ അതിലധികമോ യഥാർത്ഥ വേരിയബിളുകളുടെ ($slow, $limit_rate) മൂല്യങ്ങളെ ആശ്രയിച്ചിരിക്കുന്ന ഒരു പുതിയ വേരിയബിൾ സൃഷ്ടിക്കാൻ ഇത് നിങ്ങളെ പ്രാപ്uതമാക്കി.

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

എൻuജിuഐuഎൻuഎക്uസിലെ ബാൻഡ്uവിഡ്uത്തിന്റെ ഡൈനാമിക് ലിമിറ്റിംഗ് വ്യക്തമാക്കുന്നതിനുള്ള മറ്റൊരു സാമ്പിൾ കോൺഫിഗറേഷൻ ഉദാഹരണം ഇതാ. TLS പതിപ്പിനെ അടിസ്ഥാനമാക്കി ബാൻഡ്uവിഡ്ത്ത് പരിമിതപ്പെടുത്താൻ ഈ കോൺഫിഗറേഷൻ NGINX-നെ പ്രാപ്uതമാക്കുന്നു. ലിമിറ്റ്_റേറ്റ്_ആഫ്റ്റർ 512 എന്ന നിർദ്ദേശം തലക്കെട്ടുകൾ അയച്ചതിന് ശേഷമുള്ള പരിധി നിരക്കിനെ സൂചിപ്പിക്കുന്നു.

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

പരമ്പരയുടെ ഈ ഭാഗത്ത് ഞങ്ങൾ നിങ്ങൾക്കായി കരുതിയത് ഇത്രമാത്രം. NGINX ട്രാഫിക് മാനേജ്മെന്റിനെയും സുരക്ഷാ നിയന്ത്രണങ്ങളെയും കുറിച്ചുള്ള കൂടുതൽ വിഷയങ്ങൾ ഞങ്ങൾ കവർ ചെയ്യുന്നത് തുടരും. എന്നാൽ പതിവുപോലെ, ചുവടെയുള്ള ഫീഡ്uബാക്ക് ഫോം വഴി നിങ്ങൾക്ക് ഈ ഗൈഡിനെക്കുറിച്ച് ചോദ്യങ്ങൾ ചോദിക്കാനോ നിങ്ങളുടെ ചിന്തകൾ പങ്കിടാനോ കഴിയും.

റഫറൻസ്: NGINX വെബ്uസൈറ്റിലെ സുരക്ഷാ നിയന്ത്രണ ഗൈഡ്.