Konfiguriranje Nginx za zmogljivost in varnost

V tej vadnici bomo pogledali, kako lahko konfiguriramo spletni strežnik Nginx za proizvodno okolje.


Spletni strežnik v proizvodnem okolju se razlikuje od spletnega strežnika v testnem okolju glede zmogljivosti, varnosti in tako naprej.

Po privzetku je vedno na voljo konfiguracijska nastavitev za spletni strežnik Nginx, ko jo uspešno namestite. Vendar privzeta konfiguracija ni dovolj dobra za proizvodno okolje. Zato se bomo osredotočili na to, kako konfigurirati Nginx za boljše delovanje v času močnega in običajnega prometa in kako ga zaščititi pred uporabniki, ki ga nameravajo zlorabiti.

Če na svojem računalniku še niste namestili Nginx, lahko tukaj preverite, kako to storiti. Pokaže vam, kako namestiti Nginx na platformo Unix. Odločite se za namestitev Nginx prek izvornih datotek, ker predhodno vgrajeni Nginx ne vsebuje nekaterih modulov, uporabljenih v tej vadnici.

Zahteve

Na vašem računalniku morate imeti nameščeno naslednje in se prepričajte, da vodite to vadnico na kateri koli platformi, ki temelji na Debianu, kot je Ubuntu.

  • Ubuntu ali katero koli drugo platformo, ki temelji na Debianu
  • wget
  • Vim (urejevalnik besedil)

Prav tako morate v tem vadnici zagnati ali izvesti nekatere ukaze kot korenski uporabnik prek ukaza sudo.

Razumevanje strukture Nginx Config

V tem razdelku bomo pogledali naslednje:

  • Struktura Nginx
  • Odseki, kot so dogodek, HTTP in pošta
  • Veljavna sintaksa Nginx

Na koncu tega razdelka boste razumeli strukturo konfiguracije Nginx, namen ali vloge odsekov ter kako definirati veljavne direktive znotraj odsekov.

Celotna konfiguracijska datoteka Nginx ima logično strukturo, ki je sestavljena iz direktiv, združenih v več odsekov, kot so razdelek o dogodkih, odsek http, oddelek za pošto in tako naprej.

Primarna konfiguracijska datoteka se nahaja na /etc/nginx/nginx.conf, medtem ko se druge konfiguracijske datoteke nahajajo na / etc / nginx.

Glavni kontekst

Ta razdelek ali kontekst vsebuje direktive zunaj določenih odsekov, kot je oddelek za pošto.

Vse druge direktive, kot je uporabniški nginx; , Delav_proces 1; , Opozoriti napake_log /var/log/nginx/error.log; in pid /var/run/nginx.pid lahko postavite v glavni del ali kontekst.

Toda nekatere od teh direktiv, kot so delavski procesi, lahko obstajajo tudi v razdelku o dogodkih.

Odseki

Odseki v Nginx definirajo konfiguracijo modulov Nginx.

Na primer, v razdelku http je določena konfiguracija modula ngx_http_core, razdelek dogodek določa konfiguracijo za ngx_event_module, medtem ko odsek za pošto določa konfiguracijo za ngx_mail_module.

Lahko preverite tukaj za celoten seznam razdelkov v Nginxu.

Direktivi

Direktive v Nginxu so sestavljene iz imena spremenljivke in številnih argumentov, kot so naslednji:

Ime_delova_proces je ime spremenljivke, medtem ko avto služi kot argument.

delav_proces samodejno;

Direktive se končajo s podpičjem, kot je prikazano zgoraj.

Končno se mora konfiguracijska datoteka Nginx držati določenega niza pravil. Sledijo veljavna sintaksa konfiguracije Nginx:

  • Veljavne direktive se začnejo z imenom spremenljivke, nato pa sledi en ali več argumentov
  • Vse veljavne direktive se končajo s podpičjem;
  • Odseki so definirani s kodranimi naramnicami {}
  • Odsek je lahko vdelan v drug odsek
  • Konfiguracija zunaj katerega koli odseka je del globalne konfiguracije Nginx.
  • Vrstice, ki se začnejo z hash znakom #, so komentarji.

Uglaševanje Nginx za zmogljivost

V tem razdelku bomo konfigurirali Nginx za boljše delovanje med velikim prometom in prometnimi vrsticami.

Ogledali si bomo, kako konfigurirati:

  • Delavci
  • Disk V / I dejavnost
  • Omrežna dejavnost
  • Odbojniki
  • Stiskanje
  • Predvajanje
  • Odmor

Kljub temu v aktivirano virtualno okolje vnesite naslednje ukaze za spremembo v imenik Nginx in seznam njegove vsebine.

cd nginx && ls

Poiščite konf. Mape. Znotraj te mape je datoteka nginx.conf.

To datoteko bomo uporabili za konfiguriranje Nginx-a

Zdaj izvedite naslednje ukaze za pomikanje do mape conf in odprite datoteko nginx.conf z urejevalnikom vim

CD konf
sudo vim nginx.conf

Spodaj je posnetek zaslona kako privzeto izgleda datoteka nginx.conf.

Delavci

Da bi Nginx omogočil boljše delovanje, moramo v razdelku o dogodkih konfigurirati delavce. Konfiguriranje delavcev Nginx vam omogoča učinkovito obdelavo povezav s strankami.

Če predpostavimo, da urejevalnika vim niste zaprli, s tipko i na tipkovnici uredite datoteko nginx.conf.

Kopirajte in prilepite naslednje v razdelek o dogodkih, kot je prikazano spodaj:

dogodki {
delav_proces samodejno;
delavske povezave 1024;
delav_rlimit_nofile 20960;
multi_accept vklopljen;
mutex_accept vklopljen;
mutex_accept_delay 500ms;
uporabite epoll;
epoll_events 512;
}

delavci_procesi: Ta direktiva nadzira število delavcev v Nginxu. Vrednost te direktive je nastavljena na samodejno, tako da Nginx lahko določi število na voljo jeder, diske, obremenitev strežnika in podsistem omrežja. Vendar lahko število jeder odkrijete tako, da na terminalu izvedete ukaz lscpu.

working_connections: Ta direktiva določa vrednost števila sočasnih povezav, ki jih lahko delavec odpre. Privzeta vrednost je 512, vendar smo jo nastavili na 1,024, da bi en delavec lahko sprejel veliko hkratno povezavo odjemalca.

worker_rlimit_nofile: Ta direktiva je nekako povezana s povezavami delavcev. Za obvladovanje velike hkratne povezave jo nastavimo na veliko vrednost.

multi_accept: Ta direktiva delavcu omogoča, da hkrati sprejme številne povezave v čakalni vrsti. Čakalna vrsta v tem kontekstu preprosto pomeni zaporedje podatkovnih predmetov, ki čakajo na obdelavo.

mutex_accept: Ta direktiva je privzeto izklopljena. Ker pa smo v Nginxu konfigurirali veliko delavcev, ga moramo vklopiti, kot je prikazano v zgornji kodi, da lahko delavci drug za drugim sprejemajo nove povezave..

mutex_accept_delay: Ta direktiva določa, kako dolgo naj delavec čaka, preden sprejme novo povezavo. Ko je accept_mutex vklopljen, je zaklepanje mutex dodeljeno delavcu v časovnem okviru, ki ga določi accept_mutex_delay. Ko se časovni okvir izteče, je naslednji delavec pripravljen sprejeti nove povezave.

uporaba: Ta direktiva določa način obdelave povezave odjemalca. V tej vadnici smo se odločili, da bomo vrednost epolirali, ker delamo na platformi Ubuntu. Metoda epoll je najučinkovitejša metoda obdelave za platforme Linux.

epoll_events: Vrednost te direktive določa število dogodkov, ki jih bo Nginx prenesel v jedro.

I / O diska

V tem razdelku bomo konfigurirali asinhrono I / O aktivnost v Nginxu, da bo omogočil učinkovit prenos podatkov in izboljšal učinkovitost predpomnilnika.

Disk V / I se preprosto nanaša na postopke pisanja in branja med trdim diskom in RAM-om. Izkoristili bomo sendfile () funkcija znotraj jedra za pošiljanje majhnih datotek.

Za direktive na tem področju lahko uporabite razdelek http, lokacijo in strežnik.

Lokacijski odsek, odsek strežnika je mogoče vgraditi ali namestiti v odsek http, da bo konfiguracija berljiva.

Kopirajte in prilepite naslednjo kodo znotraj odseka o lokaciji, vdelanega v razdelek HTTP.

lokacija / pdf / {
sendfile vklopljen;
aio naprej;
}

lokacija / zvok / {
directio 4m
directio_alignment 512
}

sendfile: Če želite uporabiti vire operacijskega sistema, nastavite vrednost te direktive na. sendfile prenese podatke med deskriptorje datotek znotraj prostora jedra OS, ne da bi jih poslal v medpomnilnike aplikacij. Ta direktiva bo uporabljena za strežbo majhnih datotek.

directio: Ta direktiva izboljšuje učinkovitost predpomnilnika, saj omogoča branje in pisanje, ki se pošlje neposredno v aplikacijo. directio je značilnost datotečnega sistema vsakega sodobnega operacijskega sistema. Ta direktiva se bo uporabljala za prikazovanje večjih datotek, kot so videoposnetki.

aio: Ta direktiva omogoča več navojev, če je vklopljena za pisanje in branje. Multi-nitading je izvedbeni model, ki omogoča, da se več niti izvaja ločeno med seboj, medtem ko si delijo svoje vire procesa gostovanja.

directio_alignment: Ta direktiva prenosu podatkov dodeli vrednost velikosti bloka. Povezala se je z directio direktivo.

Omrežni sloj

V tem razdelku bomo uporabili direktive, kot sta tcp_nodelay in tcp_nopush, da preprečimo, da bi mali paketi čakali v določenem časovnem okviru približno 200 milisekund, preden jih pošljejo hkrati.

Ponavadi, ko pakete prenašamo v „kosih“, ponavadi nasičijo močno obremenjeno omrežje. John Nagle je torej zgradil algoritem pufranja da bi rešili to težavo. Namen algoritma za pufranje Nagle je preprečiti, da bi majhni paketi nasičili omrežje z visoko obremenitvijo.

Kopirajte in prilepite naslednjo kodo v razdelek HTTP.

http {

tcp_nopush vklopljen;
tcp_nodelay vklopljen;

}

tcp_nodelay: Ta direktiva je privzeto onemogočena in omogoča majhnim paketom, da počakajo določeno obdobje, preden jih pošljejo naenkrat. Ta direktiva je omogočena za pošiljanje vseh podatkov hkrati.

tcp_nopush: Ker smo omogočili tcp_nodelay direktivo, se majhni paketi pošljejo naenkrat. Če pa še vedno želite uporabiti algoritem za pufranje Johna Nagleja, lahko omogočimo tudi tcp_nopush, da medsebojno dodaja pakete in jih pošlje vse naenkrat.

Odbojniki

Oglejmo si, kako konfigurirati odbojnike zahtevkov v Nginxu za učinkovito obravnavanje zahtev. Medpomnilnik je začasna shramba, kjer se podatki nekaj časa hranijo in obdelujejo.

Spodaj lahko kopirate v razdelek s strežnikom.

strežnik {

client_body_buffer_size 8k;
client_max_body_size 2m;
odjemalca_body_in_single_buffer vklopljena;
client_body_temp_pathtemp_files 1 2;
client_header_buffer_size 1m;
large_client_header_buffers 4 8k;

}

Pomembno je razumeti, kaj počnejo ti medpomnilniki.

client_body_buffer_size: Ta direktiva določa velikost medpomnilnika za organ zahteve. Če nameravate zagnati spletni strežnik v 64-bitnih sistemih, morate vrednost nastaviti na 16k. Če želite zagnati spletni strežnik v 32-bitnem sistemu, nastavite vrednost na 8k.

client_max_body_size: Če nameravate obdelati velike datoteke, morate to direktivo nastaviti na vsaj 2 m ali več. Privzeto je nastavljena na 1m.

client_body_in_file_only: Če ste onemogočili direktivo client_body_buffer_size s simbolom hashtag # in je ta direktiva client_body_in_file_only nastavljena, bo Nginx shranil medpomnilnike zahtevkov v začasno datoteko. To ni priporočljivo za proizvodno okolje.

client_body_in_single_buffer: Včasih ni vse telo zahteve shranjeno v medpomnilniku. Preostali del se shrani ali zapiše v začasno datoteko. Če pa nameravate celoten pomnilniški prostor shraniti ali shraniti v en sam medpomnilnik, morate to direktivo omogočiti.

client_header_buffer_size: S to direktivo lahko nastavite ali dodelite medpomnilnik za glave zahtev. To vrednost lahko nastavite na 1m.

Large_client_header_buffers: Ta direktiva se uporablja za določanje največjega števila in velikosti za branje velikih glavah zahtev. Največje število in velikost medpomnilnika lahko natančno nastavite na 4 in 8 k.

Stiskanje

Stiskanje količine podatkov, prenesenih po omrežju, je še en način za zagotovitev boljšega delovanja vašega spletnega strežnika. V tem razdelku bomo uporabili direktive, kot so gzip, gzip_comp_level in gzip_min_length za stiskanje podatkov.

Naslednjo kodo prilepite v razdelek http, kot je prikazano spodaj:

http {

gzip naprej;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_types text / xml text / css;
gzip_http_version 1.1;
gzip_vary vklopljen;
gzip_disable "MSIE [4-6] \.";

}

gzip: Če želite omogočiti stiskanje, nastavite vrednost te direktive na. Privzeto je onemogočen.

gzip_comp_level: To direktivo lahko uporabite za nastavitev stopnje stiskanja. Da ne bi zapravljali virov CPU-ja, vam nivo stiskanja ni treba nastaviti previsoko. Med 1 in 9 lahko stopnjo stiskanja nastavite na 2 ali 3.

gzip_min_length: Nastavite najmanjšo dolžino odziva za stiskanje s poljem glave odgovora vsebinske dolžine. Lahko ga nastavite na več kot 20 bajtov.

gzip_types: Ta direktiva vam omogoča, da izberete vrsto odziva, ki ga želite stisniti. Privzeto je besedilo / html tipa odziva vedno stisnjeno. Dodate lahko drugo vrsto odgovora, na primer besedilo / css, kot je prikazano v zgornji kodi.

gzip_http_version: Ta direktiva vam omogoča, da izberete minimalno različico HTTP zahteve za stisnjen odgovor. Uporabite lahko privzeto vrednost, ki je 1,1.

gzip_vary: Ko je gzip direktiva omogočena, tej direktivi dodajte naslovno polje Vary: Sprejmi kodiranje k odgovoru.

gzip_disabled: Nekateri brskalniki, kot je Internet Explorer 6, nimajo podpore za stiskanje gzip. Ta direktiva uporablja polje glave User-Agent zahteve za onemogočanje stiskanja za določene brskalnike.

Predvajanje

Uporabite predpomnilne funkcije, da zmanjšate število krat, da večkrat naložite iste podatke. Nginx ponuja funkcije za predpomnjenje metapodatkov statične vsebine prek direktive open_file_cache.

To direktivo lahko postavite znotraj odseka strežnika, lokacije in http.

http {

open_file_cache max = 1000 neaktivnih = 30s;
open_file_cache_valid 30s;
open_file_cache_min_uses 4;
open_file_cache_errors vklopljen;

}

open_file_cache: Ta direktiva je privzeto onemogočena. Omogočite, če želite implementirati predpomnjenje v Nginx. Ta direktiva shranjuje metapodatke datotek in imenikov, ki jih uporabniki običajno zahtevajo.

open_file_cache_valid: Ta direktiva vsebuje informacije o varnostnem kopiranju znotraj direktive open_file_cache. S to direktivo lahko običajno določite veljavno obdobje v nekaj sekundah, po katerem se informacije, povezane z datotekami in imeniki, ponovno potrdijo.

open_file_cache_min_uses: Nginx običajno očisti informacije znotraj direktive open_file_cache po obdobju neaktivnosti, ki temelji na open_file_cache_min_uses. S to direktivo lahko določite minimalno število dostopa in določite, do katerih datotek in imenikov je aktivno dostopen.

open_file_cache_errors: S to direktivo lahko Nginxu omogočite predpomnjenje napak, kot sta “dovoljenje zavrnjeno” ali “ne more dostopati do te datoteke”, ko do njih dostopate. Torej kadar koli do virov dostopa uporabnik, ki nima pravice do tega, Nginx prikaže isto poročilo o napaki “dovoljenje zavrnjeno”.

Odmor

Konfigurirajte časovno omejitev z direktivami, kot sta keepalive_timeout in keepalive_requests, da preprečite, da bi dolgotrajne povezave zapravljale vire.

V razdelku HTTP kopirajte in prilepite to kodo:

http {

keepalive_timeout 30s;
keepalive_requests 30;
send_timeout 30s;

}

keepalive_timeout: Ohranjajte povezave približno 30 sekund. Privzeta vrednost je 75 sekund.

keepalive_requests: konfigurirajte številne zahteve, da ostanejo žive v določenem časovnem obdobju. Število zahtev lahko nastavite na 20 ali 30.

keepalive_disable: če želite onemogočiti povezavo keepalive za določeno skupino brskalnikov, uporabite to direktivo.

send_timeout: nastavite časovno omejitev za prenos podatkov odjemalcu.

Varnostna konfiguracija za Nginx

Naslednji se osredotočajo izključno na to, kako varno konfigurirati Nginx namesto spletne aplikacije. Tako si ne bomo ogledali spletnih napadov, kot je SQL injekcija in tako naprej.

V tem razdelku bomo pogledali, kako konfigurirati naslednje:

  • Omeji dostop do datotek in imenikov
  • Konfigurirajte dnevnike za spremljanje zlonamernih dejavnosti
  • Preprečevanje DDoS
  • Onemogoči seznam imenikov

Omeji dostop do datotek in imenikov

Poglejmo si, kako omejiti dostop do občutljivih datotek in imenikov z naslednjimi metodami.

Z uporabo overjanja HTTP

Dostop do občutljivih datotek ali območij, ki niso namenjena javnemu ogledu, lahko omejimo tako, da uporabnike ali celo skrbnike zahtevamo za preverjanje pristnosti. Zaženite naslednji ukaz, če želite namestiti pripomoček za ustvarjanje geslovnih datotek, če ga še niste namestili.

apt-get namestite -y apache-utils

Nato z orodjem htpasswd ustvarite datoteko z geslom in uporabnika, kot je prikazano spodaj. Orodje htpasswd nudi pripomoček apache2-utils.

sudo htpasswd -c / itd / apache2 / .htpasswd mikrofon

Z naslednjim ukazom lahko potrdite, ali ste uspešno ustvarili uporabniško in naključno geslo

mačka itd / apache2 / .htpasswd

Znotraj razdelka lokacije lahko prilepite naslednjo kodo, da uporabnike pozovete k preverjanju pristnosti z direktivo auth_basic.

lokacija / administrator {

basic_auth "Upravno območje";
auth_basic_user_file / etc / apache2 / .htpasswd;

}

Z uporabo direktive Dovoli

Poleg direktive basic_auth lahko za omejitev dostopa uporabimo tudi direktivo dovolite.

Znotraj oddelka o lokaciji lahko uporabite naslednjo kodo, da določenim naslovom IP omogočite dostop do občutljivega območja.

lokacija / administrator {
dovoli 192.168.34.12;
dovoli 192.168.12.34;
}

Konfigurirajte dnevnike za spremljanje zlonamernih dejavnosti

V tem razdelku bomo konfigurirali dnevnike o napakah in dostop do dnevnikov za natančno spremljanje veljavnih in neveljavnih zahtev. Pregledate lahko te dnevnike in ugotovite, kdo se je prijavil ob določenem času ali kateri uporabnik je dostop do določene datoteke in tako naprej.

error_log: Omogoča vam, da nastavite beleženje v določeno datoteko, na primer syslog ali stderr. Določite lahko tudi stopnjo sporočil o napakah, ki jih želite prijaviti.

access_log: Omogoča pisanje zahteve uporabnikov v datoteko access.log

Znotraj oddelka HTTP lahko uporabite naslednje.

http {

dnevniki dostopa / dnevnik / access.log skupaj;
log_log log / warn.log svari;

}

Preprečite DDOS

Nginx lahko zaščitite pred napadom DDOS z naslednjimi metodami:

Omejevanje uporabniških zahtev 

Za omejitev stopnje zahteve, ki jo uporabniki pošljejo v minutah, lahko uporabite direktivi limit_req_zone in limit_req..

V razdelek o lokaciji, vdelan v razdelek s strežnikom, dodajte naslednjo kodo.

limit_req_zone $ binary_remote_addr cona = ena: hitrost 10m = 30r / m;

strežnik {
lokacija /admin.html {
limit_req cona = ena;
}

}

Omejite število povezav 

Za omejitev povezave na določene lokacije ali območja lahko uporabite direktivi limit_conn in limit_conn_zone. Na primer, spodnja koda prejme 15 odjemalcev za določeno obdobje.

Naslednja koda bo v razdelku o lokaciji.

limit_conn_zone $ binary_remote_addr cona = addr: 10m;

strežnik {

lokacija / izdelki / {
limit_conn addr 10;

}
}

Prekinite počasne povezave   

Za nadzor nad tem, kako dolgo bo Nginx čakal na pisanje iz telesa odjemalca in glave odjemalca, lahko uporabite direktive o časovnih omejitvah, kot sta client_body_timeout in client_header_timeout.

V razdelek s strežnikom dodajte naslednje.

strežnik {
client_body_timeout 5s;
client_header_timeout 5s;
}

Prav tako bi bilo dobro zaustaviti DDoS napade na robu z uporabo rešitev v oblaku, kot je omenjeno tukaj.

Onemogoči seznam imenikov

Uporabite lahko direktivo auto_index, da preprečite seznam imenikov, kot je prikazano v spodnji kodi. Če želite onemogočiti kotiranje v imeniku, ga morate nastaviti na izklopljeno vrednost.

lokacija / {
samodejni vnos izklopljen;
}

Zaključek

Spletni strežnik Nginx smo konfigurirali za učinkovito delovanje in ga zaščitili pred pretirano zlorabo v proizvodnem okolju. Če uporabljate Nginx za spletne aplikacije, ki so usmerjene v internet, morate za boljše delovanje in varnost razmisliti tudi o uporabi CDN in varnosti v oblaku..

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