Konfigurácia Nginx pre výkon a bezpečnosť

V tomto návode sa pozrieme na to, ako môžeme nakonfigurovať webový server Nginx pre produkčné prostredie.


Webový server v produkčnom prostredí sa líši od webového servera v testovacom prostredí, pokiaľ ide o výkon, bezpečnosť atď.

Po úspešnom nainštalovaní webového servera Nginx je predvolene vždy pripravené nastavenie konfigurácie. Predvolená konfigurácia však nie je dostatočná pre výrobné prostredie. Preto sa zameriame na to, ako nakonfigurovať Nginx tak, aby fungoval lepšie počas prudkého a normálneho dopravného náporu, a ako ho zabezpečiť pred používateľmi, ktorí ho chcú zneužiť..

Ak ste do svojho počítača Nginx nenainštalovali, môžete tu skontrolovať, ako to urobiť. Ukazuje vám, ako nainštalovať Nginx na platforme Unix. Vyberte si inštaláciu Nginxu zo zdrojových súborov, pretože predinštalovaný Nginx sa nedodáva s niektorými modulmi použitými v tomto návode..

požiadavky

Na počítači musíte mať nainštalované nasledujúce súbory a uistite sa, že tento tutoriál spustíte na akejkoľvek platforme založenej na Debiane, ako je napríklad Ubuntu..

  • Ubuntu alebo akákoľvek iná platforma založená na Debiane
  • wget
  • Vim (textový editor)

Tiež musíte spustiť alebo vykonať niektoré príkazy v tomto tutoriále ako užívateľ root pomocou príkazu sudo.

Pochopenie štruktúry konfigurácie Nginx

V tejto časti sa pozrieme na nasledujúce:

  • Štruktúra Nginx
  • Sekcie ako udalosť, HTTP a mail
  • Platná syntax Nginx

Na konci tejto časti pochopíte štruktúru konfigurácie Nginx, účel alebo úlohy sekcií, ako aj to, ako definovať platné smernice vo vnútri sekcií..

Celý konfiguračný súbor Nginx má logickú štruktúru, ktorá sa skladá zo smerníc zoskupených do niekoľkých sekcií, ako sú napríklad sekcia udalostí, sekcia http, sekcia pošty atď..

Primárny konfiguračný súbor je umiestnený na /etc/nginx/nginx.conf, zatiaľ čo ostatné konfiguračné súbory sú umiestnené na / etc / nginx.

Hlavný kontext

Táto sekcia alebo kontext obsahuje smernice mimo konkrétnych sekcií, ako je sekcia pošty.

Akékoľvek ďalšie smernice, ako napríklad užívateľ nginx; , Worker_processes 1; , Error_log /var/log/nginx/error.log warn; a pid /var/run/nginx.pid môžu byť umiestnené v hlavnej sekcii alebo kontexte.

Niektoré z týchto smerníc, napríklad pracovné postupy, však môžu existovať aj v sekcii udalostí.

oddiely

Sekcie v Nginxe definujú konfiguráciu pre moduly Nginx.

Napríklad sekcia http definuje konfiguráciu modulu ngx_http_core, sekcia udalostí definuje konfiguráciu modulu ngx_event_module, zatiaľ čo sekcia pošty definuje konfiguráciu modulu ngx_mail_module..

Môžete skontrolovať tu pre úplný zoznam sekcií v Nginxe.

smernice

Smernice v Nginx sa skladajú z premenného názvu a niekoľkých argumentov, ako napríklad:

Worker_processes je názov premennej, zatiaľ čo auto slúži ako argument.

worker_processes auto;

Smernice sa končia bodkočiarkou, ako je uvedené vyššie.

Nakoniec musí konfiguračný súbor Nginx dodržiavať konkrétny súbor pravidiel. Platná syntax konfigurácie Nginx je nasledovná:

  • Platné smernice začínajú názvom premennej a potom jedným alebo viacerými argumentmi
  • Všetky platné smernice končia bodkočiarkou;
  • Sekcie sú definované zloženými zátvorkami {}
  • Časť môže byť vložená do inej sekcie
  • Konfigurácia mimo ktorejkoľvek sekcie je súčasťou globálnej konfigurácie Nginx.
  • Riadky začínajúce znakom hash # sú komentáre.

Ladenie Nginx pre výkon

V tejto časti nakonfigurujeme Nginx, aby fungoval lepšie počas silnej premávky a dopravnej špičky.

Pozrime sa, ako nakonfigurovať:

  • pracovníci
  • Aktivita disku / výstupu
  • Sieťová aktivita
  • nárazníky
  • kompresia
  • caching
  • Čas vypršal

Napriek tomu vo vnútri aktivovaného virtuálneho prostredia zadajte nasledujúce príkazy, aby ste prešli do adresára Nginx a uviedli jeho obsah.

cd nginx && ls

Vyhľadajte priečinok conf. Vnútri tohto priečinka je súbor nginx.conf.

Tento súbor použijeme na konfiguráciu Nginx

Teraz vykonajte nasledujúce príkazy, aby ste prešli do priečinka conf a otvorte súbor nginx.conf pomocou editora vim

cd conf
sudo vim nginx.conf

Nižšie je uvedená snímka o tom, ako v predvolenom nastavení vyzerá súbor nginx.conf.

pracovníci

Aby sme mohli Nginxu dosiahnuť lepšiu výkonnosť, musíme v časti udalostí nakonfigurovať pracovníkov. Konfigurácia pracovníkov Nginx vám umožňuje efektívne spracovať pripojenia od klientov.

Ak ste nezavreli editor vim, stlačením tlačidla i na klávesnici upravte súbor nginx.conf..

Skopírujte a prilepte do sekcie udalostí nasledujúci obrázok:

diania {
worker_processes auto;
pracovné prepojenia 1024;
worker_rlimit_nofile 20960;
multi_accept on;
mutex_accept on;
mutex_accept_delay 500ms;
používať epoll;
epoll_events 512;
}

worker_processes: Táto smernica riadi počet pracovníkov v Nginxe. Hodnota tejto smernice je nastavená na auto a umožňuje Nginxu určiť počet dostupných jadier, diskov, zaťaženia servera a sieťového subsystému. Počet jadier však môžete zistiť spustením príkazu lscpu na termináli.

worker_connections: Táto smernica nastavuje hodnotu počtu súčasných pripojení, ktoré môže pracovník otvoriť. Predvolená hodnota je 512, ale nastavili sme ju na 1 024, aby jeden pracovník mohol prijať oveľa simultánnejšie pripojenie od klienta.

worker_rlimit_nofile: Táto smernica nejakým spôsobom súvisí s pracovnými pripojeniami. Aby sme zvládli veľké súčasné pripojenie, nastavili sme ho na veľkú hodnotu.

multi_accept: Táto smernica umožňuje pracovníkovi prijať veľa spojení vo fronte naraz. Fronta v tomto kontexte znamená jednoducho postupnosť dátových objektov čakajúcich na spracovanie.

mutex_accept: Táto smernica je v predvolenom nastavení vypnutá. Ale pretože sme v Nginxe nakonfigurovali veľa pracovníkov, musíme ich zapnúť tak, ako je to zobrazené v predchádzajúcom kóde, aby pracovníci mohli postupne prijímať nové spojenia..

mutex_accept_delay: Táto smernica určuje, ako dlho by mal pracovník počkať, kým prijme nové pripojenie. Po zapnutí súboru accept_mutex sa pracovníkovi pridelí zámok mutex na časový rámec špecifikovaný v parametri accept_mutex_delay. Po uplynutí časového limitu je nasledujúci pracovník v rade pripravený prijať nové pripojenia.

use: Táto smernica špecifikuje spôsob spracovania pripojenia od klienta. V tomto návode sme sa rozhodli nastaviť hodnotu epoll, pretože pracujeme na platforme Ubuntu. Metóda epoll je najúčinnejšou metódou spracovania pre platformy Linux.

epoll_events: Hodnota tejto smernice určuje počet udalostí, ktoré Nginx prenesie do jadra.

Diskové I / O

V tejto časti nakonfigurujeme asynchrónnu aktivitu I / O v Nginx, aby sme mohli vykonávať efektívny prenos údajov a zlepšovať efektívnosť vyrovnávacej pamäte..

Disk I / O jednoducho označuje operácie zápisu a čítania medzi pevným diskom a RAM. Využijeme poslať súbor() na zasielanie malých súborov vo vnútri jadra.

Pre direktívy v tejto oblasti môžete využiť sekciu http, sekciu umiestnenia a sekciu servera.

Sekcia umiestnenia, sekcia servera môže byť vložená alebo umiestnená do sekcie http, aby bola konfigurácia čitateľná.

Skopírujte a prilepte nasledujúci kód do sekcie umiestnenia zabudovanej do sekcie HTTP.

umiestnenie / pdf / {
sendfile on;
aio na;
}

umiestnenie / zvuk / {
directio 4m
priame smerovanie 512
}

sendfile: Ak chcete využívať prostriedky operačného systému, nastavte hodnotu tejto smernice na hodnotu on. sendfile prenáša údaje medzi deskriptormi súborov v priestore jadra OS bez ich odoslania do aplikačných vyrovnávacích pamätí. Táto smernica sa použije na doručovanie malých súborov.

directio: Táto smernica zlepšuje efektívnosť vyrovnávacej pamäte tým, že umožňuje, aby sa čítanie a zápis posielali priamo do aplikácie. directio je funkcia súborového systému každého moderného operačného systému. Táto smernica sa použije na doručovanie väčších súborov, ako sú videá.

aio: Táto smernica povoľuje viaczávitové vlákno, keď je zapnuté pre operácie zápisu a čítania. Viacvláknové spracovanie je model vykonávania, ktorý umožňuje viacerým vláknam spúšťať oddelene jeden od druhého, zatiaľ čo zdieľajú svoje prostriedky hostiteľského procesu.

directio_alignment: Táto smernica priraďuje dátovému prenosu hodnotu veľkosti bloku. Súviselo to so smernicou directio.

Sieťová vrstva

V tejto časti využijeme smernice, ako napríklad tcp_nodelay a tcp_nopush, aby sme zabránili tomu, aby malé pakety čakali v stanovenom časovom rámci asi 200 milisekúnd, než budú odoslané naraz..

Zvyčajne, keď sa pakety prenášajú na „kusy“, majú tendenciu saturovať vysoko zaťaženú sieť. Takže John Nagle postavil algoritmus vyrovnávacej pamäte tento problém vyriešiť. Účelom Nagleovho vyrovnávacieho algoritmu je zabrániť tomu, aby malé pakety nasýtili vysoko zaťaženú sieť.

Skopírujte a prilepte nasledujúci kód do sekcie HTTP.

http {

tcp_nopush on;
tcp_nodelay on;

}

tcp_nodelay: Táto smernica je v predvolenom nastavení vypnutá, aby umožnila malým paketom čakať určitý čas, kým sa neodošlú naraz. Táto smernica je povolená, aby sa umožnilo zasielanie všetkých údajov naraz.

tcp_nopush: Pretože sme povolili príkaz tcp_nodelay, malé pakety sa odosielajú naraz. Ak však stále chcete používať algoritmus vyrovnávacej pamäte Johna Nagleho, môžeme tiež povoliť, aby tcp_nopush pridával pakety a posielal ich všetky naraz..

nárazníky

Pozrime sa, ako nakonfigurovať vyrovnávacie pamäte žiadostí v Nginxe, aby efektívne zvládali požiadavky. Vyrovnávacia pamäť je dočasné úložisko, v ktorom sa údaje určitý čas uchovávajú a spracúvajú.

Nižšie môžete skopírovať časť servera.

server {

client_body_buffer_size 8k;
client_max_body_size 2m;
client_body_in_single_buffer on;
client_body_temp_pathtemp_files 1 2;
client_header_buffer_size 1m;
large_client_header_buffers 4 8k;

}

Je dôležité pochopiť, čo tieto vyrovnávacie riadky robia.

client_body_buffer_size: Táto smernica nastavuje veľkosť vyrovnávacej pamäte pre telo žiadosti. Ak plánujete spustiť webový server na 64-bitových systémoch, musíte nastaviť hodnotu na 16 kB. Ak chcete spustiť webový server v 32-bitovom systéme, nastavte hodnotu na 8 kB.

client_max_body_size: Ak máte v úmysle spracovať odovzdávanie veľkých súborov, musíte túto smernicu nastaviť aspoň na 2 m alebo viac. Štandardne je nastavená na 1 m.

client_body_in_file_only: Ak ste zakázali direktívu client_body_buffer_size so symbolom hashtag # a táto direktíva client_body_in_file_only je nastavená, Nginx potom uloží vyrovnávacie pamäte požiadaviek do dočasného súboru. Toto sa neodporúča pre výrobné prostredie.

client_body_in_single_buffer: Niekedy nie všetky telo žiadosti je uložené vo vyrovnávacej pamäti. Zvyšok sa uloží alebo zapíše do dočasného súboru. Ak však chcete uložiť alebo uložiť úplnú vyrovnávaciu pamäť požiadaviek v jedinej vyrovnávacej pamäti, musíte povoliť túto smernicu.

client_header_buffer_size: Túto smernicu môžete použiť na nastavenie alebo pridelenie vyrovnávacej pamäte pre hlavičky žiadostí. Túto hodnotu môžete nastaviť na 1 m.

large_client_header_buffers: Táto smernica sa používa na nastavenie maximálneho počtu a veľkosti na čítanie hlavičiek veľkých žiadostí. Môžete nastaviť maximálny počet a veľkosť vyrovnávacej pamäte presne na 4 a 8 000.

kompresia

Ďalším spôsobom, ako zaistiť lepšiu výkonnosť webového servera, je kompresia množstva údajov prenášaných v sieti. V tejto časti využijeme na kompresiu údajov smernice ako gzip, gzip_comp_level a gzip_min_length..

Vložte nasledujúci kód do sekcie http, ako je to znázornené nižšie:

http {

gzip;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_typy text / xml text / css;
gzip_http_version 1.1;
gzip_vary dňa;
gzip_disable "MSIE [4-6] \.";

}

gzip: Ak chcete povoliť kompresiu, zapnite hodnotu tejto smernice. V predvolenom nastavení je zakázané.

gzip_comp_level: Túto smernicu môžete využiť na nastavenie úrovne kompresie. Aby ste nestratili prostriedky CPU, nemusíte nastavovať príliš vysokú úroveň kompresie. Medzi 1 a 9 môžete nastaviť úroveň kompresie na 2 alebo 3.

gzip_min_length: Nastavte minimálnu dĺžku odpovede na kompresiu pomocou poľa hlavičky odpovede na dĺžku obsahu. Môžete ho nastaviť na viac ako 20 bajtov.

gzip_types: Táto smernica vám umožňuje vybrať typ odpovede, ktorú chcete komprimovať. V predvolenom nastavení je typ odpovede text / html vždy komprimovaný. Môžete pridať aj iný typ odpovede, napríklad text / css, ako je to uvedené v kóde vyššie.

gzip_http_version: Táto smernica vám umožňuje zvoliť minimálnu verziu HTTP požiadavky na komprimovanú odpoveď. Môžete použiť predvolenú hodnotu, ktorá je 1.1.

gzip_vary: Ak je povolená smernica gzip, táto smernica pridá pole hlavičky Vary: Accept Encoding to the response.

gzip_disabled: Niektoré prehliadače, napríklad Internet Explorer 6, nepodporujú kompresiu gzip. Táto smernica využíva pole hlavičky žiadosti User-Agent na zakázanie kompresie pre určité prehliadače.

caching

Využite funkcie ukladania do vyrovnávacej pamäte na zníženie počtu načítaní rovnakých údajov viackrát. Nginx poskytuje funkcie na ukladanie metadát statického obsahu do vyrovnávacej pamäte prostredníctvom smernice open_file_cache.

Túto smernicu môžete umiestniť do sekcie servera, umiestnenia a http.

http {

open_file_cache max = 1 000 neaktívnych = 30 s;
open_file_cache_valid 30s;
open_file_cache_min_uses 4;
open_file_cache_errors on;

}

open_file_cache: Táto smernica je v predvolenom nastavení vypnutá. Povoľte ju, ak chcete implementovať ukladanie do vyrovnávacej pamäte v Nginxe. Táto smernica ukladá metadáta súborov a adresárov bežne požadovaných používateľmi.

open_file_cache_valid: Táto smernica obsahuje informácie o zálohovaní v rámci smernice open_file_cache. Túto smernicu môžete použiť na nastavenie platného obdobia zvyčajne v sekundách, po uplynutí ktorého sa znova overia informácie týkajúce sa súborov a adresárov..

open_file_cache_min_uses: Nginx zvyčajne jasné informácie v rámci smernice open_file_cache po období nečinnosti na základe open_file_cache_min_uses. Túto smernicu môžete použiť na nastavenie minimálneho počtu prístupov na identifikáciu, ku ktorým súborom a adresárom sa aktívne pristupuje.

open_file_cache_errors: Túto smernicu môžete využiť na to, aby ste umožnili Nginxu ukladať do vyrovnávacej pamäte chyby, ako napríklad „povolenie bolo odmietnuté“ alebo „nemôžu mať prístup k tomuto súboru“, keď sa k súborom pristupuje. Kedykoľvek teda k prostriedku pristupuje používateľ, ktorý na to nemá právo, Nginx zobrazí rovnaké chybové hlásenie „povolenie bolo odmietnuté“.

Čas vypršal

Nakonfigurujte časový limit pomocou smerníc, ako napríklad keepalive_timeout a keepalive_requests, aby ste zabránili plytvaniu zdrojov čakaním dlho čakajúcich spojení..

V sekcii HTTP skopírujte a prilepte nasledujúci kód:

http {

keepalive_timeout 30s;
keepalive_requests 30;
send_timeout 30s;

}

keepalive_timeout: Udržujte pripojenia nažive asi 30 sekúnd. Predvolená hodnota je 75 sekúnd.

keepalive_requests: Nakonfigurujte niekoľko žiadostí, aby zostali nažive určitý čas. Počet žiadostí môžete nastaviť na 20 alebo 30.

keepalive_disable: Ak chcete zakázať pripojenie Keepalive pre určitú skupinu prehľadávačov, použite túto smernicu.

send_timeout: Nastavte časový limit na prenos údajov do klienta.

Konfigurácia zabezpečenia pre Nginx

Nasledujúci text sa zameriava iba na to, ako bezpečne nakonfigurovať Nginx namiesto webovej aplikácie. Nebudeme sa teda zaoberať webovými útokmi, ako je SQL injection atď.

V tejto časti sa pozrieme na to, ako nakonfigurovať nasledujúce položky:

  • Obmedzte prístup k súborom a adresárom
  • Nakonfigurujte protokoly na sledovanie škodlivých aktivít
  • Zabráňte DDoS
  • Zakázať zoznam adresárov

Obmedzte prístup k súborom a adresárom

Pozrime sa, ako obmedziť prístup k citlivým súborom a adresárom pomocou nasledujúcich metód.

Využitím autentifikácie HTTP

Prístup k citlivým súborom alebo oblastiam, ktoré nie sú určené na verejné prezeranie, môžeme obmedziť výzvou na overenie od používateľov alebo dokonca od správcov. Ak ste nenainštalovali pomôcku na vytváranie súborov hesiel, spustite nasledujúci príkaz.

apt-get install -y apache-utils

Ďalej vytvorte súbor hesiel a používateľa pomocou nástroja htpasswd, ako je to znázornené nižšie. Nástroj htpasswd poskytuje obslužný program apache2-utils.

sudo htpasswd -c / etc / apache2 / .htpasswd mike

Pomocou nasledujúceho príkazu môžete potvrdiť, či ste úspešne vytvorili používateľské a náhodné heslo

cat etc / apache2 / .htpasswd

Do sekcie umiestnenia môžete vložiť nasledujúci kód a vyzvať používateľov na autentifikáciu pomocou smernice auth_basic.

location / admin {

basic_auth "Správcovská oblasť";
auth_basic_user_file / etc / apache2 / .htpasswd;

}

Využitím smernice Povoliť

Okrem smernice basic_auth môžeme na obmedzenie prístupu použiť aj smernicu povoľovania.

Vo vnútri oblasti umiestnenia môžete pomocou nasledujúceho kódu povoliť zadaným adresám IP prístup do citlivej oblasti.

location / admin {
povoliť 192,166,34,12;
povoliť 192,166,34;
}

Nakonfigurujte protokoly na sledovanie škodlivých aktivít

V tejto časti nakonfigurujeme protokoly chýb a prístupov tak, aby konkrétne monitorovali platné a neplatné žiadosti. Tieto denníky môžete skontrolovať, aby ste zistili, kto sa prihlásil v konkrétnom čase alebo ktorý používateľ pristupoval k určitému súboru a tak ďalej.

error_log: Umožňuje nastaviť protokolovanie do konkrétneho súboru, ako je syslog alebo stderr. Môžete tiež určiť úroveň chybových hlásení, ktoré chcete protokolovať.

access_log: Umožňuje písať požiadavku používateľov do súboru access.log

Vo vnútri sekcie HTTP môžete použiť nasledujúce.

http {

kombinované protokoly access_log / access.log;
error_log logs / warn.log warn;

}

Zabráňte DDOS

Nginx môžete chrániť pred útokom DDOS nasledujúcimi spôsobmi:

Obmedzenie požiadaviek používateľov 

Na obmedzenie rýchlosti odoslania žiadostí používateľmi v priebehu niekoľkých minút môžete použiť smernice limit_req_zone a limit_req..

Do sekcie umiestnenia vloženej do sekcie servera pridajte nasledujúci kód.

limit_req_zone $ binary_remote_addr zone = one: 10m rate = 30r / m;

server {
umiestnenie /admin.html {
limit_req zone = one;
}

}

Obmedzte počet pripojení 

Na obmedzenie pripojenia k určitým miestam alebo oblastiam môžete použiť smernice limit_conn a limit_conn_zone. Napríklad nasledujúci kód prijíma 15 klientov od konkrétneho obdobia.

Nasledujúci kód prejde do sekcie umiestnenia.

limit_conn_zone $ binary_remote_addr zone = addr: 10m;

server {

miesto / produkty / {
limit_conn addr 10;

}
}

Ukončite pomalé pripojenia   

Na riadenie toho, ako dlho bude Nginx čakať na zápisy z tela klienta a hlavičky klienta, môžete použiť smernice týkajúce sa časových limitov, ako je client_body_timeout a client_header_timeout..

Do sekcie servera pridajte nasledujúci text.

server {
client_body_timeout 5s;
client_header_timeout 5s;
}

Bolo by tiež dobré zastaviť útoky DDoS na hranici využitím riešení založených na cloudoch, ako je uvedené vyššie.

Zakázať zoznam adresárov

Môžete použiť direktívu auto_index, aby ste zabránili výpisu adresárov, ako je to znázornené v nižšie uvedenom kóde. Ak chcete vypnúť zoznam adresárov, musíte ho nastaviť na vypnutú hodnotu.

umiestnenie / {
auto_index vypnuté;
}

záver

Webový server Nginx sme nakonfigurovali tak, aby fungoval efektívne a zabezpečil ho pred nadmerným zneužívaním v produkčnom prostredí. Ak používate Nginx pre webové aplikácie orientované na internet, mali by ste tiež zvážiť použitie CDN a zabezpečenia založeného na cloudu, aby ste dosiahli lepší výkon a bezpečnosť..

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map