Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Programet
  • Instalimi i serverit të internetit nginx. Kufizoni numrin e metodave të disponueshme për të hyrë në serverin e uebit

Instalimi i serverit të internetit nginx. Kufizoni numrin e metodave të disponueshme për të hyrë në serverin e uebit

Nginx është një server në internet dhe server proxy postar që është i disponueshëm publikisht që nga viti 2004. Zhvillimi i projektit filloi në 2002, në rusisht emri tingëllon si "engin-ex". Krijimi i duarve të programuesit të famshëm Igor Sysoev, Nginx fillimisht ishte menduar për Rambler. Është projektuar për sistemet operative që i përkasin grupit të ngjashëm me Unix. Asambleja u testua me sukses në OpenBSD, FreeBSD, Linux, Mac OS X, Solaris. Në platformë Microsoft Windows Nginx filloi të punojë me lëshimin e ndërtimit binar 0.7.52.

Statistikat për Mars 2011 tregojnë se numri i faqeve të shërbyera nga Nginx tashmë ka kaluar shifrën 22 milionë. Sot Nginx përdoret nga projekte të tilla të njohura si Rambler, Begun, Yandex, SourceForge.net, WordPress.com, vkontakte.ru dhe të tjerë. Së bashku me lighttpd, Nginx përdoret për të shërbyer përmbajtje statike të krijuar nga një aplikacion uebi "i papërshtatshëm" që funksionon nën një server tjetër në internet.
Por, përpara se të futemi në xhunglën e veçorive funksionale të Nginx - është e dobishme të mbani mend se çfarë është një server në internet në përgjithësi dhe një server proxy në veçanti.

Web server dhe proxy server

Web serverështë një server që pranon kërkesat HTTP nga shfletuesit e internetit dhe klientë të tjerë dhe lëshon përgjigje HTTP ndaj tyre. Këto të fundit zakonisht përfaqësohen nga një faqe HTML, një transmetim mediatik, imazh, skedar dhe të dhëna të tjera. Një server në internet kuptohet si software që zbaton funksionet e ueb serverit, si dhe harduerin. Shkëmbimi i të dhënave dhe informacionit të kërkuar kryhet nëpërmjet protokollit HTTP.

Lista funksione shtesë serverët e uebit përfshijnë: autorizimin dhe vërtetimin e përdoruesve, regjistrimin e kërkesave të tyre në burime, mbështetje HTTPS për ndërrim të sigurt me klientët dhe të tjerë. Ueb serveri më i përdorur në sistemet operative të ngjashme me Unix është Apache. Rreshti i tretë në listën e preferencave të klientit aktualisht është i zënë nga Nginx.

Proxy server lejon klientët të trajtojnë pyetje kërkimi për të shërbimet e rrjetit në formë indirekte. Kjo do të thotë, është një server që është i specializuar në përcjelljen e kërkesave të klientëve në serverë të tjerë. Duke u lidhur me një server proxy dhe duke kërkuar një burim të vendosur në një server tjetër, klienti ka aftësinë të ruajë anonimitetin dhe të mbrojë kompjuterin nga sulmet në rrjet... Proxy server i lëshon të dhënat e kërkuara klientit ose nga cache e tij (nëse ka) ose i merr ato nga serveri i specifikuar. Në disa raste (për të arritur qëllimet e mësipërme), përgjigja e serverit, si kërkesa e klientit, mund të ndryshohet nga serveri proxy.

Proxy serveri më i thjeshtë konsiderohet të jetë Përkthyesi i Adresave të Rrjetit ose NAT. Në vitin 2000, proxy NAT u ndërtua në shpërndarjen e Windows. Proxy serverët, si çdo fenomen, kanë dy anët e medaljes, domethënë mund të përdoren si për të mirë ashtu edhe për të keq. Për shembull, me ndihmën e tyre ata që kanë frikë nga sanksionet për veprimet e tyre të pahijshme në rrjet fshehin adresat e tyre IP ...

Gama funksionale e Nginx:

  • mirëmbajtja e serverit të skedarëve të indeksit, pyetjet statike, gjenerimi i përshkruesve të cache-ve skedarë të hapur, lista e skedarëve;
  • proxying i përshpejtuar, shpërndarja elementare e ngarkesës, toleranca ndaj gabimeve;
  • mbështetje për caching gjatë proxying të përshpejtuar dhe FastCGI;
  • mbështetje për serverët FastCGI (të përshpejtuar) dhe memcached;
  • modulariteti, filtrat, duke përfshirë "rifillimin" (varg-byte) dhe kompresimin (gzip);
  • Autentifikimi HTTP, përgjigjet e copëtuara, filtri SSI;
  • ekzekutimi paralel i disa nënkërkesave në faqen e përpunuar përmes FastCGI ose proxy në filtrin SSI;
  • Mbështetje StartTLS dhe SSL;
  • aftësia për të mbështetur Perl të integruar;
  • vërtetim i thjeshtë (USER / PASS, LOGIN);
  • ridrejtimi i serverit (proxy IMAP / POP3) i përdoruesit në prapavijën IMAP / POP3 duke përdorur një server të jashtëm vërtetimi (HTTP).

Për ata që nuk janë të njohur me këtë terminologji, përshkrimi i funksionalitetit të Nginx mund të duket mjaft i paqartë. Por kur bëhet fjalë për mënyrat e përdorimit konkret të këtij web serveri - ai do të fillojë të zbehet pak nga pak.

Arkitektura dhe konfigurimi

Proceset e punëtorit Nginx shërbejnë për lidhje të shumta njëkohësisht, duke u siguruar atyre thirrjet OS (sistemi operativ) epoll (Linux), zgjidhni dhe kqueue (FreeBSD). Të dhënat e marra nga klienti analizohen me anë të një makine shtetërore. Kërkesa e analizuar trajtohet nga zinxhiri i modulit të specifikuar nga konfigurimi. Formimi i një përgjigjeje ndaj klientit ndodh në buferë, të cilët mund të tregojnë një seksion të një skedari ose të ruajnë të dhëna në memorie. Sekuenca e transmetimit të të dhënave te klienti përcaktohet nga zinxhirët në të cilët grupohen buferët.

Strukturisht, serveri Nginx HTTP është i ndarë në serverë virtualë, të cilët nga ana tjetër ndahen në vendndodhje. Server virtual ose direktiva mund të përdoret për të specifikuar portet dhe adresat për pranimin e lidhjeve. Vendndodhja mund të specifikohet me një URI të saktë, pjesë të një URI ose një shprehje të rregullt. Për menaxhimin e kujtesës në lëvizje, grupet janë një sekuencë e blloqeve të memories së zgjedhur paraprakisht. Një bllok i caktuar fillimisht për pishinën ka një gjatësi prej 1 deri në 16 kilobajt. Ai është i ndarë në zona - të pushtuara dhe të pabanuara. Ndërsa kjo e fundit plotësohet, zgjedhja e një objekti të ri sigurohet nga formimi i një blloku të ri.

Klasifikimi gjeografik i klientëve sipas adresës së tyre IP bëhet në Nginx duke përdorur modul i veçantë... Sistemi i pemës Radix ju lejon të punoni shpejt me adresat IP, duke marrë një minimum memorie.

Përfitimet e Nginx

Nginx konsiderohet të jetë shumë i shpejtë Server HTTP... Në vend të ose në lidhje me Apache, Nginx përdoret për të shpejtuar përpunimin e kërkesave dhe për të zvogëluar ngarkesën në server. Fakti është se aftësitë e mëdha të ofruara nga arkitektura modulare Apache nuk kërkohen nga shumica e përdoruesve. Pagesa për këtë funksionalitet të padeklaruar është një humbje e konsiderueshme e burimeve të sistemit. Për faqet e zakonshme, si rregull, ekziston një dominim i qartë i skedarëve statikë (imazhe, skedarë stili, JavaScript) dhe jo skriptet. Asnjë funksionalitet i veçantë nuk kërkohet për t'i transferuar këto skedarë te vizitori i burimit, pasi detyra është shumë e thjeshtë. Kjo do të thotë që serveri në internet për përpunimin e kërkesave të tilla duhet të jetë i thjeshtë dhe i lehtë, si Nginx.

Mënyrat për të përdorur Nginx

Në një port / IP të veçantë. Nëse burimi është plot me imazhe ose skedarë për shkarkim, Nginx mund të konfigurohet në një port ose IP të veçantë dhe të shërbejë përmbajtje statike përmes tij. Për ta bërë këtë, megjithatë, duhet të shqetësoheni pak me ndryshimin e lidhjeve në sit. Me një numër të madh kërkesash për skedarë statikë, ka kuptim të krijoni një server të veçantë dhe të instaloni Nginx në të.

Përfaqësimi i përshpejtuar... Me këtë opsion, të gjitha kërkesat e vizitorëve shkojnë së pari në Nginx. Nginx trajton kërkesat për skedarë statikë (të tillë si një imazh, skedar i thjeshtë HTML, JavaScript ose CSS) më vete. Nëse përdoruesi kontakton një skript të caktuar, ai ia përcjell kërkesën departamentit Apache. Ju nuk keni nevojë të bëni ndonjë transformim me kodin e faqes.

Nëse kanali nga serveri te vizitori dhe anasjelltas është i ngadalshëm, ky përdorim i Nginx mund të japë një efekt shtesë. Kërkesa e marrë nga vizitori i kalon Nginx për përpunim nga Apache. Pas përpunimit të kërkesës, Apache drejton faqen Nginx dhe përfundon lidhjen me një ndjenjë të arritjes. Nginx tani mund t'i dërgojë një faqe një përdoruesi për aq kohë sa është e nevojshme, praktikisht pa konsumuar burime të sistemit. Apache që funksiononte në vend të tij do të shoqërohej nga një ngarkesë e paarsyeshme e lartë e memories kur ishte pothuajse boshe. Nga rruga, ky rast përdorimi për Nginx ka një emër tjetër: "Frontend to Apache".

Nginx plus FastCGI. Apache mund të mos jetë fare i nevojshëm nëse përkthyesi i gjuhës në të cilën janë shkruar skriptet e faqes mbështet teknologjinë FastCGI. Gjuhë të tilla përfshijnë, për shembull, PHP, Perl dhe një numër të tjerash. Megjithatë, në këtë rast, mund t'ju duhet të modifikoni kodet e skriptit.

Ka shumë materiale të detajuara se si të instaloni dhe konfiguroni Nginx në rrjet. Mund të mësoni më shumë rreth Nginx në faqen e internetit të zhvilluesit të saj Igor Sysoev.

Një server i dedikuar në internet i bazuar në nginx është një mënyrë e shkëlqyer për të përmirësuar performancën e faqeve tuaja të internetit. Në shpejtësinë e përpunimit të përmbajtjes statike, ajo thjesht nuk ka të barabartë: përballon lehtësisht disa mijëra lidhje të njëkohshme dhe mund të optimizohet dhe rregullohet lehtësisht për çdo konfigurim. Por? Si një front-end për Apache, nginx rezulton të jetë pika më e cenueshme e të gjithë infrastrukturës së Uebit, prandaj, vëmendje e veçantë duhet t'i kushtohet sigurisë së nginx.

Ky artikull është një lloj programi arsimor, ose, nëse dëshironi, një përmbledhje e të gjitha teknikave për rritjen e sigurisë së nginx. Nuk do të ketë asnjë teori, asnjë përshkrim të bazave të konfigurimit të një serveri në internet, apo ndonjë gjë tjetër. Në vend të kësaj, ju bëheni shterues material praktik, i cili përshkruan të gjithë hapat bazë që duhet të ndërmerrni për të marrë një server Web vërtetë të sigurt.

Instalimi

Paketa nginx është e disponueshme e parapërpiluar për çdo shpërndarje. Megjithatë, duke e ndërtuar vetë serverin, mund ta bëni atë më kompakt dhe më të besueshëm, dhe gjithashtu mund të ndryshoni linjën e përshëndetjes së serverit të Uebit për të dekurajuar kiddies jo inteligjente të skriptit.

Ndryshoni linjën e mirëseardhjes së serverit në internet

Shkarkoni burimet nginx, hapni skedarin src / http / ngx_http_header_filter_module.c dhe gjeni dy rreshtat e mëposhtëm:

static char ngx_http_server_string = "Serveri: nginx" CRLF;
static char ngx_http_server_full_string = "Serveri:" NGINX_VER CRLF;

Zëvendësojini ato me diçka si kjo:

static char ngx_http_server_string = "Serveri:] [ Web Server"CRLF;
static char ngx_http_server_full_string = "Server:] [Web Server" CRLF;

Hiqni të gjitha modulet nginx që nuk po përdorni

Disa module nginx lidhen me serverin e uebit pikërisht në kohën e përpilimit, dhe secili prej tyre është potencialisht i rrezikshëm. Ndoshta, në të ardhmen, një dobësi do të gjendet në njërën prej tyre dhe serveri juaj do të jetë në rrezik. Duke çaktivizuar modulet e panevojshme, mund të reduktoni ndjeshëm rrezikun e një situate të tillë.

Ndërtoni me komandat e mëposhtme:

# ./konfiguro --without-http_autoindex_module --without-http_ssi_module
#bëj
# bëj instalim

Kjo do t'ju japë nginx me modulet SSI (Server Side Includes) dhe Autoindex të çaktivizuar (dhe në shumicën e rasteve të padobishme). Për të zbuluar se cilat module mund të hidhen në mënyrë të sigurtë nga serveri i uebit, ekzekutoni skriptin e konfigurimit me flamurin "-help".

Zbërthimi i nginx.konf

Pas instalimit, nginx duhet të konfigurohet. Në faqet e revistës kishte tashmë material që përshkruan këtë proces, por ne do t'i përmbahemi temës së artikullit dhe do të flasim për mënyrat për të përmirësuar sigurinë e serverit.

Çaktivizo shfaqjen e versionit të serverit në të gjitha faqet e gabimeve

Shtoni rreshtin "server_tokens off" në skedarin nginx.conf. Kjo do të bëjë që nginx të fshehë llojin dhe versionin e serverit në internet në faqet e krijuara në përgjigje të një kërkese të gabuar të klientit.

Vendosni mbrojtjen kundër thyerjeve të pirgut

Shtoni në seksionin e serverit rreshtat e mëposhtëm:

# vi /etc/nginx/nginx.conf

# Madhësia maksimale një buffer për ruajtjen e trupit të kërkesës së klientit
klient_trup_buffer_madhësia 1K;
# Madhësia maksimale e tamponit për ruajtjen e titujve të kërkesave të klientit
klienti_header_buffer_size 1k;
# Madhësia maksimale e trupit të kërkesës së klientit, siç specifikohet në fushën Content-Length të kokës. Nëse serveri duhet të mbështesë ngarkimet e skedarëve, kjo vlerë duhet të rritet
klient_max_madhësia_trupit 1k;
# Numri dhe madhësia e buferave për leximin e kokës së madhe të kërkesës së klientit
big_client_header_buffers 2 1k;

Kushtojini vëmendje direktivës large_client_header_buffers. Si parazgjedhje, nginx ndan katër bufera për të ruajtur vargun URI, secila prej të cilave është e barabartë me madhësinë faqet e memories (për x86 është 4 KB). Buferët lëshohen sa herë që lidhja hyn në gjendjen e mbajtjes së gjallë pas përpunimit të kërkesës. Dy buferë 1 KB mund të ruajnë vetëm URI 2 KB, gjë që ju lejon të luftoni bots dhe sulmet DoS.

Shtoni linjat e mëposhtme për të përmirësuar performancën:

# vi /etc/nginx/nginx.conf

# Kohëzgjatja gjatë leximit të trupit të kërkesës së klientit
klienti_body_timeout 10;
# Kohëzgjatja gjatë leximit të kokës së kërkesës së klientit
klienti_header_timeout 10;
# Kohëzgjatja pas së cilës lidhja e mbajtur gjallë me klientin nuk do të mbyllet nga serveri
keepalive_timeout 5 5;
# Kohëzgjatja kur dërgoni një përgjigje te klienti
koha e dërgimit 10;

Kontrolloni numrin e lidhjeve të njëkohshme

Për të mbrojtur serverin e uebit nga mbingarkesa dhe përpjekjet DoS, shtoni linjat e mëposhtme në konfigurim:

# vi /etc/nginx/nginx.conf

# Përshkruani zonën (kufizuese) ku do të ruhen gjendjet e sesionit. Një zonë 1 MB mund të ruajë rreth 32000 gjendje, ne e vendosëm atë në 5 MB
kufijtë e zonës së kufirit $ binary_remote_addr 5m;
# Vendosni numrin maksimal të lidhjeve të njëkohshme për një seancë. Në fakt, ky numër përcakton numrin maksimal të lidhjeve nga një IP
limit_conn limitet 5;

Direktiva e parë duhet të jetë në seksionin HTTP, e dyta në seksionin e vendndodhjes. Kur numri i lidhjeve tejkalon kufijtë, klienti do të marrë një mesazh "Shërbimi nuk është i disponueshëm" me një kod 503.

Lejo lidhjet vetëm me domenin tuaj

Hakerët mund të përdorin bot për të skanuar nënrrjetat dhe për të gjetur serverë të cenueshëm në internet. Në mënyrë tipike, robotët thjesht kalojnë nëpër intervalet e IP-së duke kërkuar 80 porte të hapura dhe dërgojnë një kërkesë HEAD për të marrë informacion rreth serverit të uebit (ose faqja kryesore). Mund ta parandaloni lehtësisht një skanim të tillë duke mos lejuar hyrjen në server me adresë IP (shtoni në nënseksionin e vendndodhjes):

# vi /etc/nginx/nginx.conf

nëse ($ host! ~ ^ (host.com | www.host.com) $) (
kthimi 444;
}

Kufizoni numrin e metodave të disponueshme për të hyrë në serverin e uebit

Disa robotë përdorin metoda të ndryshme thërret serverin për të provuar të përcaktojë llojin dhe / ose depërtimin e tij, megjithatë RFC 2616 thotë qartë se serveri në internet nuk duhet t'i zbatojë të gjitha ato dhe metodat e pambështetura thjesht mund të mos përpunohen. Sot, vetëm metodat GET (kërkesa për dokument), HEAD (kërkesa për kokën e serverit) dhe POST (kërkesë për publikim dokumenti) mbeten në përdorim, kështu që të gjitha të tjerat mund të çaktivizohen pa dhimbje duke vendosur rreshtat e mëposhtëm në seksionin e serverit të skedarit të konfigurimit:

# vi /etc/nginx/nginx.conf

nëse ($ kërkesa_metoda! ~ ^ (MERRNI | KREU | POST) $) (
kthimi 444;
}

Chuck bots

Një mënyrë tjetër për të bllokuar robotët, skanerët dhe shpirtrat e tjerë të këqij bazohet në përcaktimin e llojit të klientit (agjent-përdorues). Nuk është shumë efektiv, sepse shumica e robotëve imitojnë shfletues plotësisht të ligjshëm, por në disa raste mbetet i dobishëm:

# vi /etc/nginx/nginx.conf

# Blloko menaxherët e shkarkimit
nëse ($ http_user_agent ~ * LWP :: E thjeshtë | BBBike | wget) (
kthimi 403;
}
# Blloko disa lloje robotësh
nëse ($ http_user_agent ~ * msnbot | scrapbot) (
kthimi 403;
}

Blloko mesazhet e padëshiruara të referuesit

Nëse faqja juaj publikon regjistrat e uebit në domenin publik, ju mund të bëheni lehtësisht viktimë e postës së padëshiruar të referuesit (kur bot-et e padëshiruara kontaktojnë serverin tuaj, duke specifikuar adresën e faqes së reklamuar në kokën e referuesit). Ky lloj i spamit mund të prishë lehtësisht renditjen e SEO të një faqe në internet, kështu që është e domosdoshme ta bllokoni atë. Një mënyrë për ta bërë këtë është të vendosni në listën e zezë fjalët më të zakonshme që gjenden në URL-të e faqeve të reklamuara.

# vi /etc/nginx/nginx.conf

# Seksioni i serverit
nëse ($ http_referer ~ * (foshnja | shitje në shitje | vajzë | bizhuteri | dashuri | nudit | organike | poker | pornografi | seks | adoleshente))
{
kthimi 403;
}

Blloko lidhjen e drejtpërdrejtë

Hotlink është përfshirja e një imazhi (ose përmbajtje tjetër) nga një faqe tjetër në një faqe. Në fakt, kjo është vjedhje, sepse imazhi në të cilin keni shpenzuar më shumë se një orë nga koha juaj e lirë, jo vetëm që përdoret lirisht nga të tjerët, por gjithashtu krijon një ngarkesë në serverin tuaj të internetit pa sjellë vizitorë në të. Për të luftuar lidhjet e nxehtësisë, mjafton të siguroheni që imazhet t'i jepen klientit vetëm nëse ai i ka kërkuar ato ndërsa është tashmë në sit (me fjalë të tjera, titulli i kërkesës së referuesit duhet të përmbajë emrin e faqes suaj). Shtoni linjat e mëposhtme në seksionin e serverit të skedarit të konfigurimit nginx.conf (host.com është adresa e faqes suaj):

# vi /etc/nginx/nginx.conf

vendndodhja / imazhet / (
valid_referers asnjë i bllokuar www.host.com host.com;
nëse ($ invalid_referer) (
kthimi 403;
}
}

Përndryshe, ju mund të konfiguroni serverin për të shërbyer flamur i veçantë me një mesazh vjedhjeje në vend të imazhit të kërkuar. Për ta bërë këtë, zëvendësoni rreshtin "kthimi 403" me rreshtin:

rishkruaj ^ / imazhet / ngarkimet. * \. (gif | jpg | jpeg | png) $ http://www.host.com/banned.jpg fundit

Mbroni drejtoritë e rëndësishme nga të huajt

Ashtu si çdo server tjetër në internet, nginx ju lejon të rregulloni aksesin në drejtori bazuar në adresat IP dhe fjalëkalimet. Kjo veçori mund të përdoret për të mbyllur disa pjesë të sajtit nga sy kureshtarë... Për shembull, për të hequr një URI nga bota e jashtme:

# vi /etc/nginx/nginx.conf

vendndodhja / ngarkimet / (
# Lejo qasjen vetëm te makinat në rrjetin lokal
lejoj 192.168.1.0/24;
# Qep të gjithë të tjerët
mohoj të gjitha;
}

Tani vetëm përdoruesit e rrjetit lokal do të kenë akses në dokumentet e drejtorisë së ngarkimeve. Për të vendosur një fjalëkalim, do t'ju duhet të bëni hapa më komplekse. Së pari, duhet të krijoni një skedar privat fjalëkalimi për nginx dhe të shtoni përdoruesit e nevojshëm në të (si shembull, le të shtojmë përdoruesin e administratorit):

# mkdir /etc/nginx/.htpasswd
# htpasswd -c /etc/nginx/.htpasswd/passwd admin

# vi /etc/nginx/nginx.conf

vendndodhja / administratori / (
auth_basic "I kufizuar";
auth_basic_user_file /etc/nginx/.htpasswd/passwd;
}

Përdoruesit e rinj mund të shtohen duke përdorur komandën e mëposhtme:

# htpasswd -s /etc/nginx/.htpasswd/passwd përdorues

Përdorni SSL

Nëse faqja juaj funksionon me të dhëna private të përdoruesit, të tilla si numra kartat e kreditit, fjalëkalime nga shërbime të tjera ose ofron akses në një tjetër informacion i rendesishem, e cila mund të bëhet një gjë e mirë për palët e treta, kujdesuni për enkriptimin. Nginx funksionon mirë me SSL dhe nuk duhet neglizhuar.

Për të konfiguruar enkriptimin SSL duke përdorur nginx, ju vetëm duhet të ndiqni disa hapa të thjeshtë. Së pari, duhet të krijoni një certifikatë duke përdorur sekuencën e mëposhtme të komandave:

# cd / etj / nginx
# openssl genrsa -des3 -out server.key 1024
# openssl req -new -key server.key -out server.csr
# cp server.key server.key.org
# openssl rsa -in server.key.org -out server.key
# openssl x509 -req -ditë 365 -në server.csr -signkey server.key -out server.crt

Pastaj përshkruani certifikatën në skedarin e konfigurimit nginx:

# vi /etc/nginx/nginx.conf

server (
emri i serverit host.com;
dëgjo 443;
ssl në;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
access_log /etc/nginx/logs/ssl.access.log;
error_log /etc/nginx/logs/ssl.error.log;
}

Pas kësaj, mund të rinisni serverin në internet:

# /etc/init.d/nginx rifresko

Natyrisht, pa mbështetjen e vetë faqes në internet, nuk ka kuptim ta bësh këtë.

metoda të tjera

Vendosni vlerat e sakta për variablat e sistemit

Hapni skedarin /etc/sysctl.conf dhe vendosni linjat e mëposhtme në të:

# vi /etc/sysctl.conf

# Mbrojtje kundër sulmeve smurf
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Mbrojtje kundër mesazheve të pasakta ICMP
net.ipv4.icmp_ignore_bogus_error_responses = 1
# SYN mbrojtje nga përmbytjet
net.ipv4.tcp_syncookies = 1
# Çaktivizo drejtimin e burimit
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Mbrojtje kundër mashtrimit
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Ne nuk jemi një ruter
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Aktivizoni ExecShield
kernel.exec-shield = 1
kernel.randomize_va_space = 1
# Zgjeroni gamën e porteve të disponueshme
net.ipv4.ip_local_port_range = 2000 65000
# Rritni madhësinë maksimale të buferave TCP
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1

Vendosni direktorinë rrënjë të serverit në internet në një ndarje të dedikuar

Duke vendosur direktoriumin rrënjë të serverit të Uebit në një ndarje të dedikuar dhe duke mos lejuar çdo skedar të ekzekutueshëm ose pajisjeje në të, mund të mbroni pjesën tjetër të sistemit nga kushdo që mund të hyjë në rrënjën e serverit të uebit. Në këtë rast, hyrja në skedarin / etc / fstab duhet të duket diçka si kjo:

/ dev / sda5 / nginx ext4 parazgjedhjet, nosuid, noexec, nodev 1 2

Vendos nginx në mjedisin chroot / jail

Çdo sistem modern * nix ju lejon të kyçni një aplikacion në një mjedis ekzekutimi të izoluar. Në Linux, për këtë mund të përdorni teknologjitë KVM, Xen, OpenVZ dhe VServer, në FreeBSD - Jail, në Solaris - Zones. Nëse asnjë nga këto teknologji nuk është e disponueshme, mund të vendosni nginx në një chroot klasik, i cili, megjithëse shumë më i brishtë, mund të ndalet nga shumica e krisurave.

Vendosni rregullat SELinux për të mbrojtur nginx

Një alternativë e mirë mjedise të izoluara ekzekutimet janë sisteme lokale të zbulimit dhe parandalimit të ndërhyrjeve si SELinux ose AppArmor. Kur konfigurohen siç duhet, ato mund të parandalojnë përpjekjet për të komprometuar serverin e uebit. Si parazgjedhje, asnjë prej tyre nuk është i konfiguruar të funksionojë në lidhje me nginx, por brenda projektit SELinuxNginx(http://sf.net/projects/selinuxnginx/) janë krijuar rregulla për SELinux që çdokush mund t'i përdorë. Gjithçka që mbetet është të shkarkoni dhe instaloni:

# tar -zxvf se-ngix_1_0_10.tar.gz
# cd se-ngix_1_0_10 / nginx
#bëj
# / usr / sbin / semodule -i nginx.pp

Konfiguro një mur zjarri

Në mënyrë tipike, nginx instalohet në makina të dedikuara që janë gati për ngarkesa të rënda pune, kështu që shpesh mbetet shërbimi i vetëm i rrjetit që funksionon në server. Për të siguruar serverin, mjafton të krijoni një grup shumë të vogël rregullash që do të hapin portet 80, 110 dhe 143 (nëse, sigurisht, nginx duhet të funksionojë gjithashtu si një përfaqësues IMAP / POP3) dhe të mbyllë gjithçka tjetër nga bota e jashtme .

Kufizoni numrin e lidhjeve me një mur zjarri

Për një faqe interneti të lehtë, është një ide e mirë të kufizoni numrin e përpjekjeve për lidhje nga një adresë IP në minutë. Kjo mund t'ju shpëtojë nga disa lloje të sulmeve DoS dhe sulmeve me forcë brutale. Në Linux, kjo mund të bëhet duke përdorur modulin standard të gjendjes iptables / netfilter:

# iptables -A INPUT -p tcp --dport 80 -i eth0 \
-m shtet --shtet E RE -m e fundit --set
# iptables -A INPUT -p tcp --dport 80 -i eth0 \
-m gjendje --state E RE -m e fundit --përditësim \
-- sekonda 60 -- numri i goditjeve 15 -j DROP

Rregullat e shkurtojnë kufirin e numrit të lidhjeve nga një IP në minutë në 15. E njëjta gjë mund të bëhet duke përdorur pf:

# vi /etc/pf.conf

webserver_ip = "1.1.1.1"
tabela vazhdojnë
bllokohu shpejt nga
kaloni në $ ext_if proto tcp në $ webserver_ip \
port www flamujt S / SA mbaj gjendjen \
(max-src-conn 100, max-src-conn-rate 15/60, \
mbingarkesë flush)

Përveç kufirit në numrin e lidhjeve të njëpasnjëshme (15 në minutë), ky rregull vendos një kufi shtesë në numrin e lidhjeve të njëkohshme të barabartë me 100.

Konfigurimi i PHP

Nëse jeni duke përdorur nginx në lidhje me PHP, mos harroni ta konfiguroni gjithashtu. Kështu duhet të duket skedari i konfigurimit të sigurt të serverit /etc/php/php.ini:

# vi /etc/php/php.ini

# Çaktivizoni funksionet e rrezikshme
disable_functions = phpinfo, system, mail, exec
# Koha maksimale e ekzekutimit të skriptit
koha_maksimumi i_ekzekutimit = 30
# Koha maksimale që mund të shpenzojë një skrip për përpunimin e të dhënave të kërkesës
koha_max_input = 60
# Sasia maksimale e memories së caktuar për secilin skript
Kufiri_memorie = 8M
# Madhësia maksimale e të dhënave të dërguara në skript duke përdorur metodën POST
madhësia_max_post = 8M
# Madhësia maksimale e skedarëve të ngarkuar
upload_max_filesize = 2M
# Mos u shfaqni përdoruesve gabimet e skriptit PHP
shfaqja_gabimet = Joaktiv
# Aktivizo modalitetin e sigurt
safe_mode = Aktiv
# Aktivizo modalitetin e sigurt SQL
sql.safe_mode = Aktiv
# Lejoni të ekzekutohen komanda të jashtme vetëm në këtë direktori
safe_mode_exec_dir = / shteg / në / e mbrojtur / drejtoria
# Mbrojtje kundër rrjedhjeve të informacionit PHP
expose_php = Off
# Mbajtja e regjistrave
log_errors = Aktiv
# Ndaloni hapjen e skedarëve në distancë
allow_url_fopen = Joaktiv

konkluzionet

Duke zbatuar udhëzimet e përshkruara në këtë artikull, ju do të keni një server shumë më të sigurt në internet. Por mbani në mend se jo të gjitha teknikat do të përshtaten me konfigurimin tuaj. Për shembull, mbrojtja e forcës brutale bazuar në zvogëlimin e madhësisë së buferave të alokuara nga nginx për përpunimin e kërkesave të klientëve mund të çojë në një degradim të performancës dhe, në disa raste, në dështime në përpunimin e kërkesave. Kufizimi i numrit të lidhjeve do të ketë një ndikim të madh në performancën edhe të një faqe interneti të ngarkuar mesatarisht, por do të jetë e dobishme nëse faqja ka një fluks të ulët vizitorësh. Gjithmonë kontrolloni se si ndryshimet që keni bërë kanë ndikuar në performancën dhe shëndetin e përgjithshëm të faqes tuaj të internetit.

Për heroin e ditës

Nginx është një nga serverët më të fuqishëm dhe më të njohur në internet në botë. Sipas Netcraft, ai përdoret për të fuqizuar më shumë se 12 milionë faqe interneti në mbarë botën, duke përfshirë ato si Rambler, Yandex, Begun, WordPress.com, Wrike, vkontakte.ru, megashara.com, Librusek dhe Taba.ru. Një arkitekturë kompetente e bazuar në lidhjet e shumëfishta duke përdorur thirrjet e sistemit select, epoll (Linux), kqueue (FreeBSD) dhe një mekanizëm të menaxhimit të memories bazuar në grupe (buferë të vegjël nga 1 në 16 KB), lejon nginx të mos ulet edhe nën ngarkesa shumë të larta. , duke përballuar mbi 10,000 lidhje të njëkohshme (i ashtuquajturi problem C10K). Shkruar fillimisht nga Igor Sysoev për Rambler dhe u hap në 2004 nën një licencë të ngjashme me BSD.

Në kontakt me

Nginx? Qëllimi, veçoritë, opsionet e personalizimit janë gjëra me të cilat çdo zhvillues i uebit duhet të jetë i njohur në mënyrë që të testojë praktikat e tyre më të mira.

Le të themi një fjalë për nginx

Ky mjet ka një fluks pune kryesor dhe disa. E para ka të bëjë me leximin dhe kontrollimin e konfigurimit. Ai gjithashtu kontrollon menaxhimin e proceseve të punës. Detyra e këtij të fundit është të përpunojë kërkesat e ardhura. Nginx përdor një model të bazuar në ngjarje. Ai gjithashtu përdor mekanizma të varur nga sistemi operativ për të arritur shpërndarjen efikase të kërkesave drejtpërdrejt ndërmjet proceseve të punëtorëve. Numri i tyre tregohet gjithmonë në skedarin e konfigurimit. Vlera mund të fiksohet ose të vendoset automatikisht, duke u udhëhequr nga numri i bërthamave të procesorit me të cilët mund të punoni. Në nginx, sistemi dhe modulet konfigurohen duke përdorur një skedar konfigurimi. Prandaj, nëse është e nevojshme të ndryshoni diçka, atëherë është e nevojshme ta kërkoni atë. Zakonisht gjendet në direktivën / etc / nginx (por shtegu mund të ndryshojë kur përdorni sisteme të tjera) dhe ka një shtrirje .conf.

Nisja, rinisja dhe regjistrat

Për ta bërë këtë, ju duhet të vendosni ekzekutuesin në punë. Serveri nginx mund të konfigurohet vetëm kur është në punë. Kontrolli kryhet duke thirrur skedarin e ekzekutueshëm me parametrin -s. Për ta bërë këtë, përdorni hyrjen e mëposhtme:

sinjal nginx -s

V në këtë rast Ju mund të zëvendësoni komandat e mëposhtme (duhet të vijnë nga përdoruesi që ka nisur mjetin):

  1. Ndalo. Përdoret për përfundimi i shpejtë puna.
  2. Ringarkoj. Komanda është e nevojshme për të ringarkuar skedarin e konfigurimit. Çështja është se asnjë ndryshim nuk do të zbatohet gjatë ekzekutimit të skedarit. Dhe që ato të hyjnë në fuqi, kërkohet një rindezje. Sapo të merret ky sinjal, procesi kryesor do të fillojë për të kontrolluar korrektësinë e sintaksës së skedarit të konfigurimit dhe do të përpiqet të zbatojë udhëzimet e dhëna atje. Nëse nuk ka sukses, do të rikthejë ndryshimet dhe do të punojë me parametrat e vjetër. Nëse gjithçka shkoi mirë, atëherë proceset e reja të punëtorëve do të nisin dhe një kërkesë do t'u dërgohet atyre të vjetrave për të përfunduar.
  3. Hiq dorë. Përdoret për mbyllje të qetë. Përdoret nëse është e nevojshme të prisni derisa të përfundojnë shërbimi i kërkesave aktuale.
  4. Rihap. Mbyllni dhe hapni skedarët e regjistrit.

Përdorimi i shërbimeve

Proceset gjithashtu mund të konfigurohen duke përdorur veglat Unix (vegla vrasëse do të konsiderohet si shembull). Ata zakonisht përdorin një mekanizëm për të dërguar një sinjal në një proces drejtpërdrejt me të dhëna. Ata janë të lidhur duke përdorur ID. Këto të dhëna ruhen në skedarin nginx.pid. Le të themi se ne jemi të interesuar për procesin # 134. Më pas, për një përfundim të qetë, duhet të dërgojmë informacionin e mëposhtëm:

kill -s QUIT 1628

Le të themi se duam të shohim një listë të të gjithave ekzekutimin e skedarëve... Ne përdorim mjetin ps për këtë. Komanda do të duket si kjo:

ps -ax | grep nginx

Kjo do të thotë, siç mund ta shihni, kur përdorni mjete shtesë, tregohet se po përdoret. Tani le të përqendrohemi në mënyrën se si bëhet konfigurimi i nginx.

Struktura e skedarit të konfigurimit

Instalimi dhe konfigurimi i nginx përfshin punën me module. Ato janë konfiguruar duke përdorur direktivat që janë të specifikuara në skedarin e konfigurimit. Ato janë të thjeshta dhe të bllokuara. Lloji i parë i direktivës përbëhet nga një emër dhe parametra, të cilët ndahen me hapësira, dhe fundi i tyre tregohet me një pikëpresje - (;). Blloku ka një strukturë të ngjashme. Por në këtë direktivë në vend të fundit vendoset kompleti udhëzime shtesë që vendosen në mbajtëse kaçurrelë ((drejtime)). Nëse në to mund të vendosen emra dhe parametra të proceseve të tjera, atëherë ndërtime të tilla quhen kontekst. Shembujt përfshijnë http, vendndodhjen dhe serverin.

Shërbyer përmbajtje statike

Kjo është një nga detyrat më të rëndësishme me të cilat përballet konfigurimi i nginx. Shërbimi i përmbajtjes statistikore nënkupton imazhe dhe faqe HTML (jo dinamike). Le të themi se na duhet një punë një herë për të ngritur një grup nix nginx. A është e vështirë për ta bërë atë? Jo, dhe le të shohim një shembull. Para se të vazhdoni me të, është e nevojshme të detajoni kushtet e problemit. Pra, në varësi të kërkesave, skedarët do të vijnë nga drejtori të ndryshme lokale. Pra, në / të dhëna / www ne kemi dokumente HTML. Dhe drejtoria / data / images përmban imazhe. Konfigurimi optimal i nginx në këtë rast kërkon redaktimin e skedarit të konfigurimit, në të cilin është e nevojshme të konfiguroni bllokun e serverit brenda http. Dy lokacione do të përdoren gjithashtu për mbështetje.

Implementimi: server

Pra, së pari, ne duhet të krijojmë vetë drejtoritë dhe të vendosim skedarë me shtesat e nevojshme në to (përmbajtja duhet të shtohet në html). Pastaj hapim skedarin e konfigurimit. Si parazgjedhje, ai tashmë ka disa blloqe serveri, të cilët kryesisht komentohen. Për të arritur rezultatin më të mirë, ky proces duhet të bëhet në lidhje me të gjithë komponentët e paracaktuar. Pastaj shtojmë një bllok të ri serveri me kodin e mëposhtëm:

Skedari i konfigurimit mund të funksionojë me disa blloqe të tilla. Por ato duhet të ndryshojnë në emrat e tyre dhe portet përmes të cilave merren të dhënat.

Zbatimi: vendndodhja

Përcaktuar brenda serverit:

Prania e shenjës "/" është e nevojshme për të krahasuar të dhënat e marra dhe për të parë nëse ekziston një adresë e tillë nga kërkesa e përpunuar këtu. Nëse nuk ka probleme, atëherë ne tregojmë rrugën / të dhënat / www në skedari i kërkuarçfarë ka në këtë sistemi lokal... Nëse ka një ndeshje me disa blloqe, atëherë zgjidhet ai me prefiksin më të gjatë. Në shembullin e dhënë, gjatësia e tij është e barabartë me një, domethënë do të përdoret ekskluzivisht nëse nuk ka "konkurrent". Tani le ta përmirësojmë:

vendndodhja / imazhet / (

Siç mund ta thoni, ne po kërkojmë imazhe. Tani le të kombinojmë të gjitha zhvillimet që ishin më parë, dhe konfigurimi për momentin duket si ky:

vendndodhja / imazhet / (

Ky është një version funksional, i cili ndodh të jetë standard. Ky server mund të aksesohet pa probleme kompjuter lokal nëse shkoni në adresën: http: // localhost /. Si do të funksionojë e gjithë kjo?

Si funksionon shembulli

Pra, kur vijnë kërkesat që fillojnë me / imazhe, serveri do t'i dërgojë përdoruesit skedarë nga drejtoria përkatëse. Nëse mungon, do të transmetohet informacioni që tregon një gabim 404. Nëse nginx është konfiguruar në kompjuterin lokal, atëherë me kërkesën e http: //localhost/images/example.png do të marrim një skedar, vendndodhja e të cilit është /data/images/ shembull.png. Nëse specifikoni një karakter "/", kërkimi do të kryhet në drejtorinë / data / www. Por ne ndryshuam vetëm konfigurimin. Në mënyrë që ai të fillojë të funksionojë, duhet të rindizet. Për ta bërë këtë, përdorni komandën nginx -s reload. Në rastin kur punë normale nuk është e mundur, atëherë në skedarët error.log dhe access.log të vendosura në direktivën / usr / local / nginx / logs, mund të kërkoni për shkakun e dështimit.

Krijimi i një serveri të thjeshtë proxy

Për sa i përket nginx-it, konfigurimi i këtij objekti është një nga përdorimet më të zakonshme (dhe goxha e lehtë, meqë ra fjala). Ai përdor parimin e një serveri që pranon një kërkesë, dhe më pas i ridrejton ato në faqet e nevojshme. Pas kësaj pritet një përgjigje prej tyre, e cila i drejton tek ai që ka vendosur detyrën. Pra, le të shohim një shembull të krijimit të një pike bazë. Ai do t'u shërbejë kërkesave të përdoruesve dhe do t'u sigurojë atyre imazhe nga drejtoria lokale. Pra, shtoni një server tjetër në bllokun http me përmbajtjen e mëposhtme:

Tani le të deshifrojmë për ju: po krijohet një server i thjeshtë. Do të dëgjojë Mos specifikoni listen, atëherë serveri do të punojë në 80. Të gjitha kërkesat brenda zonës lokale do të shfaqen. sistemi i skedarëve që drejtohen në drejtorinë / data / up1 (natyrisht, do të duhet të krijohet para kësaj). Për të qenë në gjendje ta kontrolloni atë, duhet të vendosni skedarin index.html atje. Duke vendosur direktivën rrënjësore në kontekstin e serverit, ne do të jemi në gjendje të përdorim vendndodhjen në çdo kusht (pasi kjo heq kufizimet e aksesit). Tani po punojmë në krijimin e një serveri proxy. Që të funksionojë, na duhet direktiva proxy_pass, për të cilën protokolli, emri dhe porta e objektit do të specifikohen si parametra (nëse lidhje lokale do të duket si http: // localhost: 8080). Ju merrni rezultatin e mëposhtëm:

proxy_pass http: // localhost: 8080;

vendndodhja / imazhet / (

Nëse shikoni kodin dhe e analizoni atë, do të vini re se blloku i dytë i vendndodhjes është ndryshuar. Pra, në këtë rast, mund të funksionojë me shtesa tipike të imazhit. Pak më ndryshe, mund të shfaqet në këtë mënyrë:

vendndodhja ~ \. (gif | jpg | png) $ (

rrënjë / të dhëna / imazhe;

Konfigurimi përfundimtar i përfaqësuesit duket si ky:

proxy_pass http: // localhost: 8080 /;

vendndodhja ~ \. (gif | jpg | png) $ (

rrënjë / të dhëna / imazhe;

Ai do të filtrojë kërkesat që kanë shtesat e specifikuara në fund dhe do t'ia dërgojë ato kujtdo që ka kërkuar skedarët. Mos harroni se nëse dëshironi të kontrolloni skedarin e konfigurimit, do t'ju duhet ta ringarkoni atë. Dhe më besoni, ky është konfigurimi më i thjeshtë i nginx. Nëse hapni skedarin e konfigurimit të serverit Vkontakte ose një kompanie tjetër të madhe, ata do të kenë më shumë kod sesa fjalët në këtë artikull.

Një nga serverët më të njohur në internet

Nginx është shumë i popullarizuar në mesin e përdoruesve të uebit dhe serverit proxy për shkak të performancës së tij. Serveri ka shumë përparësi, por mund të jetë e vështirë për një fillestar të vendoset. Ne duam t'ju ndihmojmë të kuptoni skedarët e konfigurimit, sintaksën dhe cilësimet bazë të Nginx.

Hierarkia e drejtorive

Të gjithë skedarët e konfigurimit të serverit ndodhen në drejtorinë / etc / nginx. Përveç kësaj, ka disa dosje të tjera brenda drejtorisë, si dhe skedarë të konfigurimit modular.

cd / etc / nginx
ls -F
conf.d / koi-win naxsi.rules scgi_params uwsgi_params
fastcgi_params mime.types nginx.conf sites-available / win-utf
koi-utf naxsi_core.rules proxy_params sites-enabled /

Nëse keni përdorur Apache, duhet të njiheni me drejtoritë e aktivizuara për faqet dhe ato të disponueshme. Ata përcaktojnë konfigurimin e faqeve. Skedarët e krijuar ruhen në drejtorinë e fundit. Dosja e aktivizuar nga sajtet nevojitet për të ruajtur konfigurimet vetëm të faqeve të aktivizuara. Për t'i lidhur ato, ju nevojitet një lidhje simbolike midis dosjeve. Konfigurimet mund të ruhen gjithashtu në direktorinë conf.d. Në të njëjtën kohë, gjatë nisjes së Nginx, çdo skedar me shtesën .conf do të lexohet përsëri. Kur shkruani skedarët e konfigurimit, shkruani saktë kodin dhe ndiqni sintaksën. Të gjithë skedarët e tjerë janë të vendosur në / etc / nginx. Konfiguruesi përmban informacione rreth proceseve specifike, si dhe komponentëve shtesë.

Skedari kryesor i konfigurimit Nginx është nginx.conf.

Ai lexon të gjithë skedarët e konfigurimit, duke i bashkuar në një, i cili kërkohet kur fillon serveri. Hapni skedarin me:

sudo nano /etc/nginx/nginx.conf

Linjat e mëposhtme do të shfaqen në ekran:

përdoruesit www-të dhënat;
punëtori_proceset 4;
pid /var/run/nginx.pid;
ngjarjet (
punëtor_lidhjet 768;
# shumë_pranoj aktiv;
}
http (
. . .

E para është informacion i pergjithshem rreth Nginx. Fraza përdorues www-data i referohet përdoruesit që nis serverin. Direktiva pid tregon se ku ndodhen proceset PID. përdorim të brendshëm... Linja worker_processes tregon se sa procese Nginx mund të ekzekutojë në të njëjtën kohë. Përveç kësaj, këtu mund të specifikoni regjistrat (për shembull, regjistri i gabimeve përcaktohet duke përdorur direktivën e error_log). Më poshtë është seksioni i ngjarjeve. Është e nevojshme për të trajtuar lidhjet e serverit. Pas tij është blloku http.

Struktura e skedarit të konfigurimit Nginx

Kuptimi i strukturës së formatimit të skedarit do t'ju ndihmojë të kuptoni më mirë konfigurimin e serverit tuaj të internetit. Ajo është e ndarë në blloqe strukturore... Detajet e konfigurimit të bllokut http janë shtresuar duke përdorur blloqe private. Ata trashëgojnë prona nga prindi i tyre, d.m.th. ai në të cilin ndodhen. Ky bllok ruan shumicën e konfigurimeve të serverit. Ato ndahen në blloqe serveri, brenda të cilëve ndodhet vendndodhja.

Kur konfiguroni serverin tuaj Nginx, mbani mend se sa më i ulët të jetë blloku i konfigurimit, aq më pak artikuj do të trashëgojnë vetitë, dhe anasjelltas. Skedari përmban nje numer i madh i opsionet që ndryshojnë funksionimin e serverit. Për shembull, mund të vendosni ngjeshjen e skedarëve të dërguar te klienti. Për ta bërë këtë, shkruani parametrat:

gzip në;
gzip_disable "msie6";

Mbani në mend se i njëjti parametër mund të marrë kuptime të ndryshme v blloqe të ndryshme... Fillimisht vendoseni atë në krye, më pas anuloni parametrin në nivelin e duhur... Nëse veprimi i fundit nuk kryhet, programi do të vendosë vlerat në modalitetin automatik.

Rreshtat e fundit të skedarit nginx.conf janë:

përfshijnë /etc/nginx/conf.d/*.conf;
përfshijnë / etc / nginx / sites-enabled / *;

Ato tregojnë se vendndodhja dhe blloqet e serverit ruhen jashtë këtij skedari. Ata përcaktojnë cilësimet për url dhe skedarë specifikë. Kjo strukturë është e nevojshme për të mbajtur një strukturë konfigurimi modular. Brenda tij do të keni mundësi të krijoni drejtori të reja, skedarë për faqe të ndryshme. Përveç kësaj, skedarë të ngjashëm do të mund të gruponi. Pas shqyrtimit, mund të mbyllni skedarin nginx.conf.

Blloqe virtuale

Ato janë analoge me hostet virtualë në Apache. Blloqet e seksionit të serverit përfshijnë karakteristikat e vendeve individuale që ndodhen në server. Në dosjen e disponueshme të faqeve, do të gjeni skedarin e paracaktuar të bllokut të serverit. Brenda tij, mund të gjeni jashtë të dhënat e nevojshme që mund të kërkohen gjatë mirëmbajtjes së sajteve.

faqet e cd-ve të disponueshme
sudo nano parazgjedhje
server (
root / usr / share / nginx / www;
index index.html index.htm;
server_emri lokal host;
vendndodhja / (
try_files $ uri $ uri / /index.html;
}
vendndodhja / dokumenti / (
pseudonimi / usr / share / doc /;
autoindeks aktiv;
lejo 127.0.0.1;
mohoj të gjitha;
}
}

Në shembullin e mësipërm, komentimi u hoq qëllimisht. Kjo është bërë për lexueshmëri. Brenda blloqeve të serverit janë cilësimet e mbyllura në kllapa kaçurrelë:

Ky bllok vendoset duke përdorur direktivën e përfshirjes në fund të http të specifikuar në skedarin nginx.conf. Direktiva rrënjësore përcakton direktorinë ku do të vendoset përmbajtja e faqes. Në të, programi do të kërkojë skedarë që përdoruesi do të kërkojë. Rruga e paracaktuar është / usr / share / nginx / www. Nginx ndan rreshtat ose direktivat nga njëra-tjetra me pikëpresje. Nëse nuk vendosni një shenjë pikësimi, disa rreshta do të lexohen si një. Për të shkruar rregullat që do të përdoren si indeks, përdorni direktivën e indeksit. Serveri do t'i kontrollojë ato sipas renditjes që janë renditur. Nëse asnjë nga faqet e disponueshme nuk është kërkuar nga përdoruesi, index.html do të kthehet. Nëse nuk është aty, serveri do të kërkojë index.htm.

Rregulli i emrit të serverit

Ai përfshin një listë të emrave të domeneve që do të përpunohen nga blloku i serverit. Mund të shkruani çdo numër prej tyre, duke i ndarë me hapësira. Nëse vendosni * në fund ose në fillim të një domeni, do të jeni në gjendje të specifikoni një emër me një maskë. Ylli përputhet me një pjesë të emrit. Nëse regjistroheni * .com.ua, atëherë të gjitha adresat e specifikuara zona e domenit... Nëse adresa përputhet me përshkrimin e disa direktivave, atëherë ajo do të përgjigjet me atë që përshtatet plotësisht. Nëse nuk ka përputhje, përgjigja do të jetë emri më i gjatë që ka një maskë. Përndryshe, shprehjet e rregullta do të përputhen. Emrat e serverëve që përdorin shprehje të rregullta fillojnë me një tilde (~).

Blloqet e vendndodhjes

Tjetra në radhë do të kemi një bllok vendndodhjeje. Është e nevojshme për të përcaktuar metodën e përpunimit kërkesa të caktuara... Nëse burimet nuk korrespondojnë me ndonjë bllok tjetër vendndodhjeje, atëherë direktivat e specifikuara në kllapa do të zbatohen për to. Këto blloqe mund të përfshijnë një shteg si / doc /. Për të krijuar një korrespondencë të plotë midis uri dhe vendndodhjes, përdoret shenja =. Zbatimi i tildës do të përputhet me shprehjet e rregullta. Ju gjithashtu mund të vendosni ndjeshmërinë e rastit duke vendosur ~. Nëse shtoni një yll, rasti nuk ka rëndësi.

Mbani parasysh: kur kërkesa përputhet me bllokun e vendndodhjes, ajo do të përdoret dhe kërkimi do të ndalet. Kur përputhja është e paplotë, URI do të krahasohet me parametrat e direktivave të vendndodhjes. Një bllok me kombinimin ^ ~ përdoret për të përputhur URI-në për zgjedhjen e bllokut. Nëse këtë opsion mos e përdorni, serveri zgjedh përputhjen më të mirë dhe gjithashtu kërkon duke përdorur shprehje të rregullta. Kjo është e nevojshme për të zgjedhur një nga shabllonet e duhura. Nëse gjendet një shprehje që përputhet, ajo do të përdoret. Përndryshe, do të zbatohet ndeshja e mëparshme URI. Sidoqoftë, mbani në mend se Nginx i pëlqen më shumë ndeshjet e plota. Nëse nuk janë aty, do të fillojë të kërkojë shprehje të rregullta, dhe më pas nga URI. Barazia e kërkimit përcaktohet nga kombinimi i karaktereve ^ ~.

Rregulli Try_files

Eshte shume mjet i dobishëm të aftë për të kontrolluar skedarët në një rend të caktuar. Ai zbaton kriteret e para të përputhjes për të përpunuar kërkesën. ju mund të përdorni Opsione shtesë për të përcaktuar se si serveri do të shërbejë kërkesat. Konfiguruesi ka një linjë të paracaktuar si kjo:

try_files $ uri $ uri / /index.html;

Çfarë do të thotë? Nëse vjen një kërkesë që shërbehet nga një bllok vendndodhjeje, serveri së pari do të përpiqet të përpunojë uri si skedar. Kjo sigurohet nga ndryshorja $ uri. Kur nuk ka përputhje, uri do të trajtohet si një drejtori. Ju mund të kontrolloni ekzistencën e tij duke shtuar një vijë të pjerrët në fund: $ uri /. Ka situata kur nuk do të gjendet as skedari dhe as drejtoria. Në këtë rast, skedari i paracaktuar index.html do të ngarkohet. Zbatohet rregulli Try_files parametri i fundit si një kthim prapa. Kjo është arsyeja pse këtë skedar duhet të jetë në sistem. Sidoqoftë, nëse nuk gjenden fare përputhje, Nginx do të kthejë një faqe gabimi. Për ta vendosur atë, shkruani = dhe kodin e gabimit:

Opsione shtesë

Nëse zbatoni rregullin e pseudonimit, do të jeni në gjendje të shërbeni faqe në bllokun e vendndodhjes jashtë drejtorisë rrënjësore, për shembull. Kur skedarët nevojiten nga doc, ato do të kërkohen nga / usr / share / doc /. Përveç kësaj, rregulli autoindex on fillon të listojë drejtoritë e serverëve për direktivën e specifikuar të vendndodhjes. Nëse shkruani rreshtat mohojnë dhe lejojnë, do të keni mundësi të ndryshoni aksesin në drejtori.

Si përfundim, duhet thënë se Nginx është një mjet shumëfunksional shumë i fuqishëm. Por për të kuptuar mirë se si funksionon do të duhet kohë dhe përpjekje. Nëse e kuptoni se si funksionojnë konfigurimet, mund të shijoni plotësisht të gjitha veçoritë e programit.

Të tjera). Versioni aktual, 0.6.x konsiderohet e qëndrueshme për sa i përket besueshmërisë dhe lëshimet nga dega 0.7 konsiderohen të paqëndrueshme. Është e rëndësishme të theksohet se funksionaliteti i disa moduleve do të ndryshojë, si rezultat i të cilave mund të ndryshojnë edhe direktivat, prandaj përputhshmëria e prapambetur në nginx para versionit 1.0.0 nuk është i garantuar.

Pse është nginx kaq i mirë dhe pse administratorët e projekteve me ngarkesë të lartë e duan atë kaq shumë? Pse të mos përdorni vetëm Apache?

Pse Apache është i keq?

Së pari, duhet të shpjegoni se si funksionojnë në përgjithësi serverët e rrjetit. Ata që janë të njohur me programimin e rrjetit e dinë se ekzistojnë në thelb tre modele të funksionimit të serverit:

  1. Konsistente. Serveri hap një prizë dëgjimi dhe pret që të shfaqet një lidhje (është në një gjendje të bllokuar gjatë pritjes). Kur arrin një lidhje, serveri e përpunon atë në të njëjtin kontekst, mbyll lidhjen dhe pret përsëri lidhjen. Natyrisht, kjo është larg nga mënyra më e mirë, veçanërisht kur klienti ka punuar për një kohë të gjatë dhe ka shumë lidhje. Për më tepër, modeli sekuencial ka shumë më tepër disavantazhe (për shembull, pamundësia për të përdorur shumë procesorë), dhe në kushte reale praktikisht nuk përdoret.
  2. Shumëprocesore (me shumë fije). Serveri hap një prizë dëgjimi. Kur arrin një lidhje, ajo e pranon atë, pas së cilës krijon (ose merr nga një grup i atyre të krijuara më parë) proces i ri ose një fije që mund të funksionojë me lidhjen për një kohë të gjatë në mënyrë arbitrare, dhe në fund të punës të dalë ose të kthehet në pishinë. Ndërkaq, filli kryesor është gati të pranojë një lidhje të re. Ky është modeli më i popullarizuar sepse është relativisht i lehtë për t'u zbatuar, lejon llogaritje komplekse dhe që kërkojnë kohë për çdo klient dhe përdor të gjitha procesorë të disponueshëm... Një shembull i përdorimit të tij - Serveri në internet Apache... Sidoqoftë, kjo qasje ka gjithashtu disavantazhe: me një numër të madh lidhjesh të njëkohshme, krijohen shumë fije (ose, edhe më keq, procese) dhe sistemi operativ harxhon shumë burime në ndërprerësit e kontekstit. Është veçanërisht e keqe kur klientët janë shumë të ngadalshëm në pranimin e përmbajtjes. Rezulton qindra tema ose procese, të zënë vetëm me dërgimin e të dhënave për klientët e ngadaltë, gjë që krijon një ngarkesë shtesë në planifikuesin e OS, rrit numrin e ndërprerjeve dhe konsumon shumë memorie.
  3. Prizat pa bllokim / Makina e gjendjes. Serveri funksionon brenda një thread të vetëm, por përdor bazat jo-bllokuese dhe një mekanizëm votimi. ato. server në çdo përsëritje lak i pafund zgjedh nga të gjitha prizat atë që është gati të marrë/dërgojë të dhëna duke përdorur thirrjen selekto (). Pasi të zgjidhet një prizë, serveri i dërgon të dhëna ose i lexon ato, por nuk pret për konfirmim, por shkon në gjendjen fillestare dhe pret një ngjarje në një prizë tjetër, ose përpunon atë tjetër, në të cilën ngjarja ka ndodhur gjatë përpunimi i të mëparshmit. Ky model përdor me shumë efikasitet procesorin dhe memorien, por është mjaft i vështirë për t'u zbatuar. Për më tepër, në kuadrin e këtij modeli, përpunimi i një ngjarjeje në një prizë duhet të jetë shumë i shpejtë - përndryshe, shumë ngjarje do të grumbullohen në radhë dhe përfundimisht do të vërshojnë. Kështu funksionon nginx. Përveç kësaj, ju lejon të filloni procese të shumta të punëtorëve (të quajtur punëtorë), d.m.th. mund të përdorë shumë procesorë.

Pra, imagjinoni situatën e mëposhtme: 200 klientë me një kanal 256 Kbps janë të lidhur me një server HTTP me një kanal 1 Gbps:

Çfarë ndodh në rastin e Apache? Janë krijuar 200 fije/procese që gjenerojnë përmbajtje relativisht shpejt (kjo mund të jetë si faqe dinamike dhe skedarët statikë të lexuar nga disku), por ngadalë ia dorëzojnë klientëve. Sistemi operativ duhet të merret me një tufë fijesh dhe bllokimesh I/O.

Në një situatë të tillë, Nginx shpenzon një rend të madhësisë më pak OS dhe burime memorie për secilën lidhje. Sidoqoftë, këtu del në pah një kufizim i modelit të rrjetit nginx: ai nuk mund të gjenerojë përmbajtje dinamike brenda vetes, sepse kjo do të çojë në bllokimin brenda nginx. Natyrisht, ekziston një zgjidhje: nginx mund të proksojë kërkesa të tilla (për gjenerimin e përmbajtjes) në çdo server tjetër në internet (për shembull, i njëjti Apache) ose në një server FastCGI.

Le të shqyrtojmë mekanizmin e funksionimit të paketës nginx si serverin "kryesor" dhe Apache si serverin për gjenerimin e përmbajtjes dinamike:

Nginx pranon lidhjen nga klienti dhe lexon të gjithë kërkesën prej tij. Këtu duhet theksuar se derisa nginx të ketë lexuar të gjithë kërkesën, nuk e dërgon atë për “përpunim”. Për shkak të kësaj, pothuajse të gjithë treguesit e përparimit të ngarkimeve të skedarëve zakonisht "prihen" - megjithatë, është e mundur t'i rregulloni ato duke përdorur modulin upload_progress të palëve të treta (kjo do të kërkojë modifikim të aplikacionit).

Pasi nginx të ketë lexuar të gjithë përgjigjen, hap një lidhje me Apache. Ky i fundit bën punën e tij (gjeneron përmbajtje dinamike), pas së cilës i dërgon përgjigjen e tij nginx, i cili e ruan atë në memorie, ose skedar i përkohshëm... Ndërkohë, Apache çliron burimet. Më tej, nginx ngadalë dërgon përmbajtje te klienti, ndërsa shpenzon urdhra të madhësisë më pak burime sesa Apache.

Kjo skemë quhet frontend + backend dhe përdoret shumë shpesh.

Instalimi

Sepse nginx sapo ka filluar të fitojë popullaritet, ka disa probleme me paketat binare, kështu që përgatituni ta përpiloni vetë. Zakonisht ky nuk është problem, thjesht duhet të lexoni me kujdes daljen e komandës. / Konfiguro --help dhe zgjidhni opsionet e përpilimit që ju nevojiten, për shembull:

./konfiguro \
--Prefiksi = / opt / nginx-0.6.x \ # prefiksi i instalimit
--Conf-path = / etc / nginx / nginx.conf \ # vendndodhjen e skedarit të konfigurimit
-Pid-path = / var / run / nginx.pid \ # ... dhe skedari pid
-Përdoruesi = nginx \ # emri i përdoruesit nën të cilin do të funksionojë nginx
—Me-http_ssl_module —with-http_gzip_static_module —with-http_stub_status_module \ # lista e të kërkuarave
—Pa-http_ssi_module —pa-http_userid_module —pa-http_autoindex_module —pa-http_geo_module —pa-http_referer_module —pa-http_memcached_module —pa-http_module_jo të kërkuara ...e

Pas konfigurimit, duhet të ekzekutoni standardin make && make install, pas së cilës mund të përdorni nginx.

Përndryshe, në Gentoo mund të përdorni ebuild nga pema standarde e porteve; në RHEL / CentOS depoja epel (ku ndodhet nginx 0.6.x) ose srpm për versionin 0.7, i cili mund të shkarkohet nga këtu: http://blogs.mail.ru/community/nginx; në Debian, mund të përdorni paketën nginx nga dega e paqëndrueshme.

Skedari i konfigurimit

Skedari i konfigurimit nginx është shumë i përshtatshëm dhe intuitiv. Zakonisht quhet nginx.conf dhe ndodhet në prefiksin $ / conf / nëse vendndodhja nuk është ripërcaktuar gjatë përpilimit. Më pëlqen ta vendos në / etc / nginx /, dhe kështu bëjnë zhvilluesit e të gjitha paketave të përmendura më sipër.

Struktura e skedarit të konfigurimit është si më poshtë:

përdoruesi nginx; # emër përdoruesi nën të cilin do të funksionojë nginx
punëtori_proceset 1; # numër i proceseve të punonjësve
ngjarjet (
<…># ky bllok specifikon mekanizmin e votimit që do të përdoret (shih më poshtë) dhe numrin maksimal të lidhjeve të mundshme
}

Http (
<глобальные директивы http-сервера, например настройки таймаутов и т.п.>;
<почти все из них можно переопределить для отдельного виртуального хоста или локейшена>;

# përshkrim i serverëve (kjo është ajo që apache e quan VirtualHost)
server (
# adresa dhe emri i serverit
dëgjo *: 80;
emri i serverit aaa.bbb;

<Директивы сервера. Здесь обычно указывают расположение докуменов (root), редиректы и переопределяют глобальные настройки>;

# dhe kështu mund të përcaktoni vendndodhjen, për të cilën gjithashtu mund të anashkaloni pothuajse të gjitha direktivat e specifikuara në nivele më globale
vendndodhja / abcd / (
<директивы>;
}
# Përveç kësaj, ju mund të bëni vendndodhjen me shprehje të rregullt, si kjo:
vendndodhja ~ \ .php $ (
<директивы>;
}
}

# server tjetër
server (
dëgjo *: 80;
emri i serverit ccc.bbb;

<директивы>
}
}

Ju lutemi vini re se çdo direktivë duhet të përfundojë me një pikëpresje.
Reverse proxying dhe FastCGI

Pra, më lart shqyrtuam avantazhet e skemës frontend + backend, kuptuam instalimin, strukturën dhe sintaksën e skedarit të konfigurimit, merrni parasysh tani se si të zbatoni proxy-in e kundërt në nginx.

Është shumë e thjeshtë! Për shembull si kjo:

vendndodhja / (
proxy_pass http://1.2.3.4:8080;
}

Në këtë shembull, të gjitha kërkesat për vendndodhjen / do të proksiohen në serverin 1.2.3.4, portin 8080. Ky mund të jetë ose apache ose ndonjë server tjetër http.

Sidoqoftë, ka disa hollësi që lidhen me faktin që aplikacioni do të supozojë se, së pari, të gjitha kërkesat vijnë tek ai nga e njëjta adresë IP (e cila mund të interpretohet, për shembull, si një përpjekje për një sulm DDoS ose sulm me forcë brutale ), dhe së dyti, konsideroni se po funksionon në host 1.2.3.4 dhe port 8080 (përkatësisht, gjeneroni ridrejtime të pasakta dhe lidhjet absolute). Për të shmangur këto probleme pa pasur nevojë të rishkruani aplikacionin, konfigurimi i mëposhtëm më duket i përshtatshëm:
Nginx dëgjon në ndërfaqen e jashtme në portin 80.

Nëse backend-i (për shembull, Apache) ndodhet në të njëjtin host si nginx, atëherë ai "dëgjon" portin 80 në 127.0.0.1 ose një adresë tjetër IP të brendshme.

Në këtë rast, konfigurimi nginx duket si ky:

server (
dëgjo 4.3.2.1:80;
# vendosni kokën e Host-it dhe X-Real-IP: për çdo kërkesë të dërguar në backend
proxy_set_header X-Real-IP $ remote_addr;
proxy_set_header Host $ host: $ proxy_port;
# ose "proxy_set_header Host $ host;" nëse aplikacioni do të shtojë: 80 në të gjitha lidhjet
}

Në mënyrë që aplikacioni të dallojë adresat IP të vizitorëve, ju duhet ose të instaloni modulin mod_extract_forwarded (nëse është ekzekutuar nga serveri Apache), ose të modifikoni aplikacionin në mënyrë që të marrë informacione për adresën IP të përdoruesit nga X- Titulli real-IP HTTP.

Një tjetër opsion mbështetës është përdorimi i FastCGI. Në këtë rast, konfigurimi nginx do të duket diçka si kjo:

server (
<…>

# vendndodhje ku do të dërgohen kërkesat për skriptet php
vendndodhja ~ .php $ (
fastcgi_pass 127.0.0.1: 8888; # përcaktoni adresën dhe portin e serverit fastcgi,
fastcgi_index index.php; # ... skedari i indeksit

# dhe disa parametra që duhet t'i kalojnë serverit fastcgi në mënyrë që të kuptojë se cilin skript dhe me cilët parametra të ekzekutojë:
fastcgi_param SCRIPT_FILENAME / usr / www / html $ fastcgi_script_name; # emër skripti
fastcgi_param QUERY_STRING $ query_string; # varg pyetjesh
# dhe parametrat e kërkesës:
fastcgi_param REQUEST_METHOD $ request_method;
fastcgi_param CONTENT_TYPE $ content_type;
fastcgi_param CONTENT_LENGTH $ content_length;
}

#për faktin se lokacionet me shprehjet e rregullta kanë një "prioritet" të lartë, të gjitha kërkesat jo-php do të shkojnë këtu.

vendndodhja / (
rrënjë / var / www / html /
}

Statika

Për të zvogëluar ngarkesën në backend, është më mirë të shërbeni skedarët statikë vetëm përmes nginx - ai e përballon këtë detyrë më mirë, pasi për çdo kërkesë, ai shpenzon dukshëm më pak burime (nuk ka nevojë të hapet një proces i ri dhe procesi nginx zakonisht konsumon më pak memorie, dhe mund të shërbejë shumë lidhje).

Në skedarin e konfigurimit, duket kështu:

server (
dëgjo *: 80;
emri i serverit myserver.com;

Vendndodhja / (
proxy_pass


"> Http://127.0.0.1:80;

}

# supozoni se të gjithë skedarët statikë janë në / skedarë
vendndodhja / skedarët / (
rrënjë / var / www / html /; # specifikoni shtegun për në fs
skadon 14 ditë; # shtoni titullin Skadon:
error_page 404 = @back; # dhe nëse skedari nuk gjendet, dërgojeni në vendndodhjen e emërtuar @back
}

# kërkesa nga / skedarë, për të cilët nuk u gjet asnjë skedar, dërgohen në backend dhe ai mund të gjenerojë skedarin e dëshiruar ose të shfaqë mesazh i bukur në lidhje me gabimin
vendndodhja @mbrapa (
proxy_pass
"Titulli =" http://127.0.0.1:80;

"> Http://127.0.0.1:80;

}

Nëse të gjitha statikat nuk vendosen në një drejtori specifike, atëherë përdorni një shprehje të rregullt:

vendndodhja ~ * ^. + \. (jpg | jpeg | gif | png | ico | css | zip | tgz | gz | rar | bz2 | doc | xls | exe | pdf | ppt | txt | tar | wav | bmp | rtf | js) $ (
# e ngjashme me sa më sipër, vetëm të gjitha kërkesat që përfundojnë me një nga prapashtesat e specifikuara do të dërgohen në këtë vendndodhje
rrënjë / var / www / html /;
error_page 404 = @back;
}

Fatkeqësisht, nginx nuk mbështet trajtimin asinkron të skedarëve. Me fjalë të tjera, punëtori nginx është i bllokuar në operacionet I/O. Pra, nëse keni shumë skedarë statikë dhe veçanërisht nëse lexohen prej tyre disqe të ndryshme, është më mirë të rritet numri i proceseve të punëtorit (deri në një numër që është 2-3 herë më shumë se numri i përgjithshëm i kokave në disk). Kjo, natyrisht, çon në një rritje të ngarkesës në OS, por performanca e përgjithshme rritet. Për të punuar me një sasi tipike statike (jo shumë të madhe skedarësh relativisht të vegjël: CSS, JavaScript, imazhe), mjaftojnë një ose dy flukse pune.

Vazhdon

Lidhjet

Më shumë informacion rreth nginx mund të gjeni këtu:

Artikujt kryesorë të lidhur