Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Zanimljiv
  • Kako stvoriti virtualne hostove u nginxu. Nginx: konfiguracija i instalacija

Kako stvoriti virtualne hostove u nginxu. Nginx: konfiguracija i instalacija

Nginx? Svrha, značajke, opcije postavki - to su stvari s kojima bi svaki web programer trebao biti upoznat kako bi testirao svoj rad.

Recimo koju riječ o nginxu

Ovaj alat ima jedan glavni i nekoliko radnih procesa. Prvi se bavi čitanjem i provjerom konfiguracije. Upravljanje radnim procesom također je pod njegovom kontrolom. Zadatak potonjeg je obrada dolaznih zahtjeva. Nginx koristi model temeljen na događajima. Mehanizmi ovisni o operacijski sustav kako bi se postigla učinkovita distribucija zahtjeva izravno između radnih procesa. Njihov je broj uvijek naveden u konfiguracijska datoteka. Vrijednost može biti fiksna ili postavljena automatski, na temelju broja procesorske jezgre, s kojim možete raditi. U nginxu se sustav i moduli konfiguriraju pomoću konfiguracijske datoteke. Stoga, ako trebate nešto promijeniti, onda to trebate tražiti. Obično se nalazi u /etc/nginx direktivi (ali put se može promijeniti kada se koriste drugi sustavi) i ima ekstenziju .conf.

Pokretanje, ponovno pokretanje i zapisnici

Da biste to učinili, morate pokrenuti izvršnu datoteku. Konfiguriranje nginx poslužitelja moguće je samo kada je pokrenut. Upravlja se pozivom izvršna datoteka s parametrom -s. Da biste to učinili, upotrijebite sljedeću notaciju:

nginx -s signal

U u ovom slučaju Možete zamijeniti sljedeće naredbe (moraju doći od korisnika koji je pokrenuo alat):

  1. Stop. Koristi se za brzo zaustavljanje rada.
  2. Ponovno učitati. Naredba je potrebna za ponovno učitavanje konfiguracijske datoteke. Poanta je da se nikakve promjene neće primijeniti dok je datoteka pokrenuta. A da bi oni stupili na snagu, potrebno je ponovno pokretanje. Čim se ovaj signal primi, glavni proces će početi provjeravati ispravnost sintakse konfiguracijske datoteke i pokušati primijeniti upute tamo. Ako ne uspije, vratit će promjene i raditi sa starim postavkama. Ako se sve dogodilo uspješno, tada će se pokrenuti novi radni procesi, a starim će se poslati zahtjev za prekid.
  3. Prestati. Koristi se za nesmetan završetak radova. Koristi se ako trebate pričekati dok se trenutni zahtjevi ne završe s servisiranjem.
  4. Ponovo otvoriti. Zatvorite i otvorite datoteke dnevnika.

Korištenje uslužnih programa

Procesi se također mogu konfigurirati pomoću Unix alata (uslužni program kill će se smatrati primjerom). Oni obično koriste mehanizam za slanje signala procesu izravno s podacima. Povezani su pomoću ID-a. Ovi podaci pohranjeni su u datoteci nginx.pid. Recimo da nas zanima proces br.134. Zatim za nesmetan završetak trebamo poslati sljedeće podatke:

ubiti -s ODUSTATI 1628

Recimo da želimo vidjeti popis svih pokrenutih datoteka. Za to koristimo uslužni program ps. Naredba će izgledati ovako:

ps -x | grep nginx

To jest, kao što vidite, kada koristite dodatne alate, naznačeno je da se koristi. Sada se usredotočimo na to kako se radi konfiguracija nginxa.

Struktura konfiguracijske datoteke

Instalacija i konfiguracija nginxa uključuje rad s modulima. Oni se konfiguriraju pomoću direktiva koje su navedene u konfiguracijskoj datoteci. Jednostavni su i blokovi. Prva vrsta direktive sastoji se od imena i parametara, koji su odvojeni razmacima, a završavaju točkom i zarezom (;). Blok ima sličnu strukturu. Ali u ovoj direktivi, umjesto kraja, postavljen je skup dodatne upute, koji se stavljaju u vitičaste zagrade ((upute)). Ako mogu sadržavati imena i parametre drugih procesa, tada se takve konstrukcije nazivaju kontekstom. Primjeri uključuju http, lokaciju i poslužitelj.

Posluživanje statičnog sadržaja

Ovo je jedan od najvažnijih zadataka s kojima se suočava nginx konfiguracija. Pod distribucijom statističkog sadržaja mislimo na slike i HTML stranice (ne dinamičke). Recimo da nam treba jednokratni posao postavljanja nix nginx klastera. Je li to teško učiniti? Ne, i pogledajmo primjer. Prije pokretanja potrebno je detaljno definirati uvjete zadatka. Dakle, ovisno o zahtjevima, datoteke će dolaziti iz različitih lokalnih direktorija. Dakle, u /data/www imamo HTML dokumente. I direktorij /data/images sadrži slike. Optimalna postavka nginx u ovom slučaju zahtijeva uređivanje konfiguracijske datoteke, u kojoj morate konfigurirati blok poslužitelja unutar http-a. Dvije lokacije također će se koristiti za podršku.

Implementacija: poslužitelj

Dakle, prvo moramo stvoriti same direktorije i smjestiti datoteke u njih potrebna proširenja(trebate dodati sadržaj u html). Zatim otvorite konfiguracijsku datoteku. Prema zadanim postavkama već sadrži nekoliko blokova poslužitelja, koji su uglavnom komentirani. Da biste postigli optimalne rezultate, ovaj se postupak mora provesti za sve zadane komponente. Zatim dodajemo novi blok poslužitelja pomoću sljedećeg koda:

Konfiguracijska datoteka može raditi s nekoliko takvih blokova. Ali moraju se razlikovati po nazivima i portovima kroz koje se primaju podaci.

Implementacija: mjesto

Definirano unutar poslužitelja:

Prisutnost znaka “/” je neophodna da bi se usporedili primljeni podaci i vidjelo postoji li takva adresa iz obrađenog zahtjeva ovdje. Ako nema problema, navedite stazu /data/www do potrebna datoteka, što je u ovome lokalni sustav. Ako postoji podudaranje s nekoliko blokova, tada se odabire onaj s najdužim prefiksom. U navedenom primjeru njegova je duljina jednaka jedinici, odnosno koristit će se isključivo ako nema „konkurenta“. Sada ga poboljšajmo:

lokacija /slike/ (

Kako možete znati tražimo li slike? Sada kombinirajmo sve prethodno napravljene razvoje i konfiguraciju ovaj trenutak kako slijedi:

lokacija /slike/ (

Ovo je radna opcija koja je standardna.Ovom serveru se bez problema može pristupiti na lokalnom računalu ako odete na adresu: http://localhost/. Kako će sve ovo funkcionirati?

Kako primjer funkcionira

Dakle, kada stignu zahtjevi koji počinju s /images, poslužitelj će poslati datoteke iz odgovarajućeg direktorija korisniku. Ako ga nema, prenijet će se informacija koja ukazuje na pogrešku 404. Ako je nginx konfiguriran na lokalnom računalu, tada kada zatražimo http://localhost/images/example.png primit ćemo datoteku čija je lokacija /data/images/ primjer.png. Ako navedete jedan znak “/”, pretraga će se izvršiti u direktoriju /data/www. Ali promijenili smo samo konfiguraciju. Da bi počeo raditi, potrebno ga je ponovno pokrenuti. Da biste to učinili, koristite naredbu nginx -s reload. U slučaju kada normalna operacija nije moguće, tada možete potražiti uzrok problema u datotekama error.log i access.log koje se nalaze u /usr/local/nginx/logs direktivi.

Stvaranje jednostavnog proxy poslužitelja

Za nginx se može reći da je postavljanje ovog objekta jedna od uobičajenih upotreba (i prilično jednostavno, usput). Koristi princip poslužitelja koji prima zahtjeve i zatim ih preusmjerava na potrebna mjesta. Nakon toga od njih se očekuje odgovor koji ih usmjerava na onoga tko je zadatak dodijelio. Dakle, pogledajmo primjer stvaranja bazne točke. Obrađivati ​​će zahtjeve korisnika i pružati im slike iz lokalnog imenika. Dakle, u http blok dodajemo još jedan poslužitelj sa sljedećim sadržajem:

Sada ću vam to dešifrirati: kreira se jednostavan poslužitelj. Slušat će. Ako ne navedete slušanje, poslužitelj će raditi na 80. Bit će prikazani svi zahtjevi unutar lokalnog područja sustav datoteka, koji su usmjereni na direktorij /data/up1 (naravno, morat ćete ga kreirati prije ovoga). Da biste to mogli provjeriti, morate tamo smjestiti datoteku index.html. Postavljanjem root direktive u kontekst poslužitelja, možemo koristiti lokaciju pod bilo kojim uvjetima (jer to uklanja ograničenja pristupa). Sada radimo na stvaranju proxy poslužitelja. Da bi radio, potrebna nam je direktiva proxy_pass, za koju će protokol, ime i port objekta biti navedeni kao parametri (ako lokalna veza izgledat će kao http://localhost:8080). Dobit ćete sljedeći rezultat:

proxy_pass http://localhost:8080;

lokacija /slike/ (

Ako pogledate kod i analizirate ga, možete primijetiti da je drugi blok lokacije promijenjen. Dakle, u ovom slučaju može raditi s tipičnim proširenjima slika. Moglo bi se prikazati malo drugačije ovako:

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

korijen /podaci/slike;

Konačna konfiguracija proxy poslužitelja izgleda ovako:

proxy_pass http://localhost:8080/;

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

korijen /podaci/slike;

Filtrirat će upite koji završavaju s navedene ekstenzije, i pošaljite ih osobi koja je tražila datoteke. Ne zaboravite da ako želite provjeriti konfiguracijsku datoteku, morat ćete je ponovno učitati. I vjerujte mi, ovo je najjednostavnija nginx postavka. Ako otvorite konfiguracijsku datoteku poslužitelja VKontakte ili druge velike tvrtke, oni će imati više koda nego riječi u ovom članku.

I drugi). Trenutna verzija,0.6.x, smatra se stabilnim u smislu pouzdanosti, a izdanja iz grane 0.7 smatraju se nestabilnima. Važno je napomenuti da će se funkcionalnost nekih modula promijeniti, zbog čega se mogu promijeniti i direktive, stoga kompatibilnost unatrag u nginxu prije verzije 1.0.0 nije zajamčeno.

Zašto je nginx tako dobar i zašto ga administratori visokoopterećenih projekata toliko vole? Zašto jednostavno ne koristite Apache?

Zašto je Apache loš?

Prvo moramo objasniti kako oni općenito rade. mrežni poslužitelji. Oni koji su upoznati s mrežnim programiranjem znaju da u osnovi postoje tri modela rada poslužitelja:

  1. Dosljedan. Poslužitelj otvara utičnicu za slušanje i čeka da se pojavi veza (u stanju je blokiranja dok čeka). Kada veza stigne, poslužitelj je obrađuje u istom kontekstu, zatvara vezu i ponovno čeka vezu. Očito, ovo je daleko od najboljeg načina, pogotovo kada rad s klijentom traje dugo i postoji puno veza. Osim toga, serijski model ima mnogo više nedostataka (primjerice, nemogućnost korištenja više procesora), au stvarnim uvjetima praktički se ne koristi.
  2. Višeprocesni (višenitni). Poslužitelj otvara utičnicu za slušanje. Kada veza stigne, prihvaća je, nakon čega kreira (ili uzima iz skupa unaprijed kreiranih) novi proces ili dretu koja može raditi s vezom koliko god dugo želi, a po završetku rada prekinuti ili povratak u bazen. Glavna nit je u međuvremenu spremna prihvatiti novu vezu. Ovo je najviše popularan model, jer ga je relativno lako implementirati, omogućuje izvođenje složenih i dugotrajnih izračuna na svakom klijentu i koristi sve dostupne procesore. Primjer njegove upotrebe - Web- Apache poslužitelj. Međutim, ovaj pristup ima i nedostataka: s velikim brojem istodobnih veza stvara se mnogo niti (ili, još gore, procesa), a operativni sustav gubi puno resursa na preklopke konteksta. Posebno je loše kada klijenti jako sporo prihvaćaju sadržaj. To rezultira stotinama niti ili procesa koji su samo zauzeti slanjem podataka sporim klijentima, što dodatno opterećuje planer OS-a, povećava broj prekida i troši dosta memorije.
  3. Neblokirajuće utičnice/stroj stanja. Poslužitelj radi unutar jedne niti, ali koristi neblokirajuće utičnice i mehanizam prozivanja. Oni. poslužitelj u svakoj iteraciji beskrajna petlja Odabire iz svih utičnica onu koja je spremna za primanje/slanje podataka pomoću select() poziva. Nakon što je socket odabran, poslužitelj mu šalje podatke ili ih čita, ali ne čeka potvrdu, već prelazi u početno stanje i čeka događaj na drugom socketu ili obrađuje sljedeći u kojem se događaj dogodio tijekom obrade prethodni. Ovaj model vrlo učinkovito koristi procesor i memoriju, ali je prilično složen za implementaciju. Osim toga, unutar ovog modela, obrada događaja na utičnici mora se dogoditi vrlo brzo - inače će se mnogi događaji nakupiti u redu čekanja i na kraju će se on preliti. To je upravo model na kojem nginx radi. Osim toga, omogućuje vam pokretanje više radnih procesa (tzv. radnika), tj. može koristiti više procesora.

Dakle, zamislite sljedeću situaciju: 200 klijenata s kanalom od 256 Kbit/s spaja se na HTTP poslužitelj s kanalom od 1 Gbit/s:

Što se događa u slučaju Apachea? Stvoreno je 200 niti/procesa koji relativno brzo generiraju sadržaj (ovo bi moglo biti nešto poput dinamičke stranice, i statičke datoteke čitaju s diska), ali ga polako isporučuju klijentima. Operativni sustav je prisiljen nositi se s hrpom niti i I/O zaključavanja.

U ovoj situaciji, Nginx troši red veličine manje OS resursa i memorije na svaku vezu. Međutim, ovdje postoji ograničenje mrežni model nginx: ne može generirati dinamički sadržaj u sebi, jer to će dovesti do blokada unutar nginxa. Naravno, postoji rješenje: nginx može proslijediti takve zahtjeve (za generiranje sadržaja) na bilo koji drugi web poslužitelj (na primjer, isti Apache) ili na FastCGI poslužitelj.

Razmotrimo mehanizam rada kombinacije nginx kao "glavnog" poslužitelja i Apachea kao poslužitelja za generiranje dinamičkog sadržaja:

Nginx prihvaća vezu od klijenta i čita cijeli zahtjev s njega. Ovdje treba napomenuti da dok nginx ne pročita cijeli zahtjev, ne šalje ga na "obradu". Zbog toga se gotovo svi indikatori napretka učitavanja datoteka obično "pokvare" - međutim, moguće ih je popraviti pomoću modula upload_progress treće strane (za to će biti potrebna izmjena aplikacije).

Nakon što nginx pročita cijeli odgovor, otvara se veza s Apacheom. Potonji radi svoj posao (generira dinamički sadržaj), nakon čega šalje svoj odgovor nginxu koji ga sprema u međuspremnik u memoriju ili privremena datoteka. U međuvremenu, Apache oslobađa resurse. Zatim, nginx polako isporučuje sadržaj klijentu, trošeći redove veličine manje resursa od Apachea.

Ova shema se zove frontend + backend i koristi se vrlo često.

Montaža

Jer nginx tek počinje stjecati popularnost, postoje neki problemi s binarnim paketima, stoga budite spremni kompajlirati ga sami. S ovim obično nema problema, samo trebate pažljivo pročitati izlaz naredbe./configure --help i odabrati opcije kompilacije koje su vam potrebne, na primjer ove:

./konfigurirati\
--prefix=/opt/nginx-0.6.x \ # instalacijski prefiks
--conf-path=/etc/nginx/nginx.conf \ # mjesto konfiguracijske datoteke
—pid-path=/var/run/nginx.pid \ # ... i pid datoteku
—user=nginx \ # korisničko ime pod kojim će se nginx pokretati
—with-http_ssl_module —with-http_gzip_static_module —with-http_stub_status_module \ # popis potrebnih
—without-http_ssi_module —without-http_userid_module —without-http_autoindex_module —without-http_geo_module —without-http_referer_module —without-http_memcached_module —without-http_limit_zone_module # ... i nepotrebnih modula

Nakon konfiguracije, trebali biste pokrenuti standardni make && make install, nakon čega možete koristiti nginx.

Osim toga, u Gentoou možete koristiti ebuild iz standardnog stabla portova; u RHEL/CentOS putem epel repozitorija (koji sadrži nginx 0.6.x) ili srpm za verziju 0.7, koji se može preuzeti ovdje: http://blogs.mail.ru/community/nginx; na Debianu možete koristiti nginx paket iz nestabilne grane.

Konfiguracijska datoteka

Konfiguracijska datoteka nginxa vrlo je praktična i intuitivna. Obično se zove nginx.conf i nalazi se u $prefix/conf/ ako lokacija nije nadjačana tijekom kompilacije. Volim ga staviti u /etc/nginx/, kao i programeri svih gore spomenutih paketa.

Struktura konfiguracijske datoteke je sljedeća:

korisnik nginx; # korisničko ime s čijim pravima će se pokretati nginx
radnički_procesi 1; # broj radnih procesa
događaji (
<…># ovaj blok specificira mehanizam prozivanja koji će se koristiti (vidi dolje) i najveći broj mogućih veza
}

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

# opis poslužitelja (ovo se zove VirtualHost u apacheu)
poslužitelj (
# adresa i naziv poslužitelja
slušaj *:80;
server_name aaa.bbb;

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

# i ovako možete definirati lokaciju, za koju također možete nadjačati gotovo sve direktive navedene na globalnijim razinama
lokacija /abcd/ (
<директивы>;
}
# Osim toga, možete napraviti lokaciju koristeći regularni izraz, na primjer ovako:
lokacija ~ \.php$ (
<директивы>;
}
}

# drugi poslužitelj
poslužitelj (
slušaj *:80;
server_name ccc.bbb;

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

Imajte na umu da svaka direktiva mora završavati točkom i zarezom.
Obrnuto proxy i FastCGI

Dakle, iznad smo pogledali prednosti sheme frontend + backend, shvatili instalaciju, strukturu i sintaksu konfiguracijske datoteke, a sada ćemo pogledati kako implementirati obrnuti proxy u nginxu.

I to vrlo jednostavno! Na primjer ovako:

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

U ovom primjeru, svi zahtjevi koji padaju na lokaciju / bit će poslani na poslužitelj 1.2.3.4, port 8080. To može biti ili apache ili bilo koji drugi http poslužitelj.

Međutim, postoji nekoliko suptilnosti vezanih uz činjenicu da će aplikacija uzeti u obzir da joj, prvo, svi zahtjevi dolaze s iste IP adrese (što se može smatrati, na primjer, pokušajem DDoS napada ili pogađanja lozinke), i drugo, pretpostavite da radi na hostu 1.2.3.4 i portu 8080 (sukladno tome, generirajte netočna preusmjeravanja i apsolutne veze). Kako bih izbjegao ove probleme bez potrebe za prepisivanjem aplikacije, smatram da je sljedeća konfiguracija zgodna:
Nginx sluša vanjsko sučelje na portu 80.

Ako se backend (recimo Apache) nalazi na istom hostu kao i nginx, tada "osluškuje" port 80 na 127.0.0.1 ili nekoj drugoj internoj IP adresi.

Konfiguracija nginxa u ovom slučaju izgleda ovako:

poslužitelj (
slušaj 4.3.2.1:80;
# postavite Host i X-Real-IP zaglavlje: za svaki zahtjev poslan pozadini
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host:$proxy_port;
# ili “proxy_set_header Host $host;” ako će aplikacija dodati:80 svim vezama
}

Kako bi aplikacija razlikovala IP adrese posjetitelja potrebno je ili instalirati mod_extract_forwarded modul (ako ga izvršava Apache server) ili modificirati aplikaciju tako da informacije o IP adresi korisnika uzima iz X-a. Real-IP HTTP zaglavlje.

Druga pozadinska opcija je korištenje FastCGI-ja. U ovom će slučaju konfiguracija nginxa izgledati otprilike ovako:

poslužitelj (
<…>

# mjesto gdje će ići zahtjevi za php skripte
lokacija ~ .php$ (
fastcgi_pass 127.0.0.1:8888; # odrediti adresu i port fastcgi poslužitelja,
fastcgi_index index.php; # ...indeksna datoteka

# i neki parametri koje je potrebno proslijediti fastcgi poslužitelju kako bi razumio koju skriptu treba izvršiti i s kojim parametrima:
fastcgi_param SCRIPT_FILENAME /usr/www/html$fastcgi_script_name; # naziv skripte
fastcgi_param QUERY_STRING $query_string; # niz upita
# i parametri zahtjeva:
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
}

# zbog činjenice da lokacije s regularnim izrazima imaju visok "prioritet", svi ne-php zahtjevi će pasti ovdje.

mjesto/(
korijen /var/www/html/
}

Statika

Da biste manje opterećivali backend, bolje je posluživati ​​statičke datoteke samo kroz nginx - on se bolje nosi s ovim zadatkom, jer troši značajno manje resursa na svaki zahtjev (nema potrebe za pokretanjem novog procesa, ali proces nginx obično troši manje memorije, i može služiti mnogim vezama).

U konfiguracijskoj datoteci to izgleda otprilike ovako:

poslužitelj (
slušaj *:80;
server_name myserver.com;

Mjesto/(
proxy_pass


">http://127.0.0.1:80;

}

# pretpostavimo da su sve statičke datoteke u /files
mjesto /datoteke/ (
korijen /var/www/html/; # označavaju put do fs
ističe 14d; # dodajte zaglavlje Istječe:
error_page 404 = @back; # i ako datoteka nije pronađena, šaljemo je na imenovanu lokaciju @back
}

# zahtjeva iz /files za koje nije pronađena nijedna datoteka šalju se u pozadinu, a ona može generirati ili potrebna datoteka, ili pokazati lijepa poruka o grešci
lokacija @back (
proxy_pass
"naslov="http://127.0.0.1:80;

">http://127.0.0.1:80;

}

Ako sve statike nisu smještene u određeni direktorij, upotrijebite regularni izraz:

lokacija ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf |js)$ (
# slično onome gore, samo će svi zahtjevi koji završavaju s jednim od navedenih sufiksa ići na ovu lokaciju
korijen /var/www/html/;
error_page 404 = @back;
}

Nažalost, nije implementiran u nginx asinkroni rad s datotekama. Drugim riječima, nginx worker je blokiran na I/O operacijama. Dakle, ako imate puno statičkih datoteka i, pogotovo ako se čitaju s različitih diskova, bolje je povećati broj radnih procesa (na broj koji je 2-3 puta veći od ukupnog broja glava na disku). ). To, naravno, povećava opterećenje OS-a, ali ukupna izvedba raste. Za rad s tipičnom količinom statičkog sadržaja (ne baš velikim brojem relativno malih datoteka: CSS, JavaScript, slike), dovoljan je jedan ili dva tijeka rada.

Nastavit će se

Linkovi

Ovdje možete pronaći dodatne informacije o nginxu:

Nginx je web poslužitelj i proxy za e-poštu koji je javno dostupan od 2004. godine. Razvoj projekta započeo je 2002., a na ruskom naziv zvuči kao engine-ex. Budući da je kreacija poznatog programera Igora Sysoeva, Nginx je izvorno bio namijenjen tvrtki Rambler. Dizajniran je za operativne sustave koji pripadaju grupi sličnih Unixu. Sklop je uspješno testiran na OpenBSD, FreeBSD, Linux, Mac OS X, Solaris. Na peronu Microsoft Windows Nginx je počeo raditi s dolaskom verzije 0.7.52 binarnog sklopa.

Statistika za ožujak 2011. pokazuje da je broj stranica koje opslužuje Nginx već prešao granicu od 22 milijuna. Danas Nginx koriste tako dobro poznati projekti kao što su Rambler, Begun, Yandex, SourceForge.net, WordPress.com, vkontakte.ru i drugi. Uz lighttpd, Nginx se koristi za posluživanje statičnog sadržaja koji generira "nezgodna" web aplikacija koja radi "pod autoritetom" drugog web poslužitelja.
Ali prije nego što zađemo u džunglu funkcionalnih značajki Nginxa, bilo bi korisno sjetiti se što je web poslužitelj općenito, a posebno proxy poslužitelj.

Web poslužitelj i proxy poslužitelj

Web poslužitelj je poslužitelj koji prihvaća HTTP zahtjeve od web preglednika i drugih klijenata i izdaje im HTTP odgovore. Potonji su obično zastupljeni HTML stranica, medijski tok, slika, datoteka, drugi podaci. Pod web poslužiteljem podrazumijeva se softver, obavljanje funkcija web poslužitelja i hardver. Razmjena podataka i traženih informacija odvija se putem HTTP protokola.

Dodati na popis dodatne funkcije web poslužitelji uključuju: autorizaciju i autentifikaciju korisnika, evidentiranje njihovog pristupa resursima, HTTPS podršku za sigurnu komunikaciju s klijentima i drugo. Najčešće korišten web poslužitelj na operativnim sustavima sličnim Unixu je Apache. Nginx trenutno zauzima treće mjesto na listi preferencija klijenata.

Proxy poslužitelj omogućuje klijentima da se bave upite za pretraživanje Do mrežne usluge u neizravnom obliku. Odnosno, to je poslužitelj koji je specijaliziran za preusmjeravanje zahtjeva klijenata na druge poslužitelje. Spajanjem na proxy poslužitelj i traženjem resursa koji se nalazi na drugom poslužitelju, klijent ima priliku zadržati anonimnost i zaštititi računalo od mrežnih napada. Proxy poslužitelj pruža tražene podatke klijentu ili iz svoje predmemorije (ako postoji) ili ih je primio od navedeni poslužitelj. U nekim slučajevima (kako bi se postigli gore navedeni ciljevi), odgovor poslužitelja, poput zahtjeva klijenta, može modificirati proxy poslužitelj.

Najjednostavniji proxy poslužitelj je mrežni prevoditelj adresa ili NAT. Godine 2000. ugrađen je proxy NAT Windows distribucija. Proxy serveri, kao i svaka pojava, imaju dvije strane medalje, odnosno mogu se koristiti i za dobro i za zlo. Na primjer, uz njihovu pomoć skrivaju svoje IP adrese oni koji se boje sankcija za svoje nedolične radnje na internetu...

Nginx funkcionalni raspon:

  • poslužiteljsko održavanje indeksnih datoteka, statičkih upita, generiranje cache deskriptora otvorenih datoteka, lista datoteka;
  • ubrzani proxy, elementarna raspodjela opterećenja, tolerancija na greške;
  • podrška za predmemoriju tijekom ubrzanog proxyja i FastCGI;
  • podrška za FastCGI (ubrzani) i memcached poslužitelje;
  • modularnost, filtri, uključujući nastavak (rasponi bajtova) i kompresiju (gzip);
  • HTTP autentifikacija, odgovori u komadima, SSI filter;
  • paralelno izvršavanje nekoliko podupita na stranici koja se obrađuje kroz FastCGI ili proxy u SSI filteru;
  • StartTLS i SSL podrška;
  • sposobnost podrške za ugrađeni Perl;
  • jednostavna autentifikacija (USER/PASS, LOGIN);
  • preusmjeravanje poslužitelja (IMAP/POP3 proxy) korisnika na IMAP/POP3 pozadinu pomoću vanjskog autentifikacijskog poslužitelja (HTTP).

Za one koji nisu upoznati s ovom terminologijom, opis funkcionalnosti Nginxa može se činiti vrlo nejasnim. Ali kada govorimo o konkretnim načinima korištenja ovog web poslužitelja, to će se postupno početi rasipati.

Arhitektura i konfiguracija

Radnički procesi u Nginxu istovremeno opslužuju višestruke veze, pružajući im OS (operativni sustav) epoll (Linux), select i kqueue (FreeBSD) pozive. Podaci primljeni od klijenta analiziraju se pomoću stroja stanja. Raščlanjeni zahtjev obrađuje lanac modula specificiranih konfiguracijom. Odgovor klijentu generira se u međuspremnicima, koji mogu upućivati ​​na dio datoteke ili pohranjivati ​​podatke u memoriju. Redoslijed prijenosa podataka do klijenta određen je lancima u koje su međuspremnici grupirani.

Strukturno, Nginx HTTP poslužitelj podijeljen je na virtualne poslužitelje, koji su pak podijeljeni na lokacije. Virtualni poslužitelj ili direktiva mogu se specificirati s portovima i adresama za primanje veza. Za lokaciju možete navesti točan URI, dio URI-ja ili regularni izraz. Za mrežno upravljanje memorijom koriste se skupovi, koji su niz unaprijed odabranih memorijskih blokova. Jedan blok, inicijalno dodijeljen za skup, ima duljinu od 1 do 16 kilobajta. Podijeljen je na područja - nauzeta i nenaseljena. Kako se potonji puni, dodjela novog objekta osigurava se formiranjem novog bloka.

Zemljopisna klasifikacija klijenata prema njihovoj IP adresi vrši se pomoću Nginxa poseban modul. Sustav stabla Radix omogućuje vam brz rad s IP adresama, zauzimajući minimalnu memoriju.

Prednosti Nginxa

Nginx se smatra vrlo brzim HTTP poslužitelj. Umjesto Apachea ili zajedno s njim koristi se Nginx za ubrzanje obrade zahtjeva i smanjenje opterećenja poslužitelja. Činjenica je da ogromne mogućnosti, koji su svojstveni Apacheovoj modularnoj arhitekturi, nisu potrebni većini korisnika. Morate platiti za ovu netraženu funkcionalnost značajnom potrošnjom resursa sustava. Obične web stranice u pravilu karakteriziraju jasna "dominacija" statičkih datoteka (slike, stilske datoteke, JavaScript), a ne skripti. Za prijenos ovih datoteka do posjetitelja resursa nije potrebna nikakva posebna funkcionalnost, jer je zadatak vrlo jednostavan. To znači da web poslužitelj za obradu takvih zahtjeva mora biti jednostavan i lagan, poput Nginxa.

Načini korištenja Nginxa

Na zasebnom portu/IP-u. Ako je resurs zasićen slikama ili datotekama za preuzimanje, Nginx se može konfigurirati na zasebnom portu ili IP-u i distribuirati statički sadržaj preko njega. Međutim, da biste to učinili, morat ćete se malo petljati s promjenom poveznica na web mjestu. Ako postoji veliki broj zahtjeva za statičke datoteke, ima smisla stvoriti zasebni poslužitelj i na njega instalirati Nginx.

Ubrzani proxy. Uz ovu opciju, svi zahtjevi posjetitelja prvo idu Nginxu. Zahtjevi za statične datoteke (na primjer, slike, jednostavan HTML, JavaScript ili CSS datoteka) Nginx ga samostalno obrađuje. Ako korisnik pristupi određenoj skripti, preusmjerit će zahtjev na Apache odjel. Nema potrebe za bilo kakvim transformacijama koda stranice.

Ako je kanal od poslužitelja do posjetitelja i obrnuto spor, ovakva upotreba Nginxa može dati dodatni učinak. Nginx prosljeđuje zahtjev primljen od posjetitelja Apacheu na obradu. Nakon obrade zahtjeva, Apache prosljeđuje stranicu Nginxu i prekida vezu s osjećajem postignuća. Nginx sada može slati stranicu korisniku koliko god dugo želi, praktički bez trošenja resursa sustava. Rad Apachea na njegovom mjestu bio bi popraćen nerazumno velikim opterećenjem memorije kada bi radio gotovo u praznom hodu. Usput, ovaj slučaj upotrebe za Nginx ima drugo ime: "sučelje za Apache".

Nginx plus FastCGI. Apache možda uopće neće biti potreban ako tumač jezika na kojem su napisane skripte stranice podržava FastCGI tehnologiju. Takvi jezici uključuju, na primjer, PHP, Perl i niz drugih. Međutim, u ovom slučaju možda ćete morati izmijeniti kodove skripte.

Na internetu postoji mnogo detaljnih materijala o tome kako instalirati i konfigurirati Nginx. Više o Nginxu možete saznati na web stranici njegovog programera Igora Sysoeva.

Trenutno su najveću popularnost stekla dva web poslužitelja. To su Apache i Ngnix. Svaki od njih ima svoje prednosti i nedostatke. Apache je razvijen davne 1995. godine i njegov razvoj nije uzeo u obzir sve moguće potrebe korisnika, troši puno memorije i resursa sustava, ali ga je lako konfigurirati. Nginx je razvijen nešto kasnije, 2002. godine, uzimajući u obzir Apacheove pogreške i fokusirajući se na maksimalnu izvedbu.

Nećemo ulaziti u detalje o prednostima i manama oba ova web poslužitelja. Svaki od njih ima svoje područje primjene. Ovaj vodič pokriva instalaciju Nginx Ubuntu 16.04. Iako ću govoriti o Ubuntu 16.04, svi će koraci funkcionirati i za druge distribucije. Postavljanje Nginxa svugdje je isto, samo je instalacijska naredba drugačija.

Prvi korak je instalacija samog web poslužitelja na sustav. Program se nalazi u službenim spremištima, ali njegova verzija je već malo zastarjela, pa ako želite najnoviju verziju, trebate dodati PPA:

sudo apt-add-repository ppa:nginx/stable

Trenutačno je verzija 1.10.0 dostupna u službenim repozitorijima, a 1.10.1 je već dostupna u stabilnom PPA. Ako vam ne treba verzija, možete bez PPA. Zatim ažurirajte popise paketa iz repozitorija:

I instalirajte ngnix:

sudo apt instalirajte nginx

Nakon instalacije Nginx poslužitelj bude dovršen, dodajte program u startup kako bi se automatski pokrenuo:

sudo systemctl omogući nginx

Ako sada otvorite preglednik, vidjet ćete da je nginx pokrenut, ali još ga moramo konfigurirati.

Postavljanje Nginx Ubuntu

Postavljanje Nginx Ubuntua puno je kompliciranije od Apachea. Ovdje nećemo razmatrati sve mogućnosti i mogućnosti programa, već ćemo govoriti samo o glavnima. Jesti razne konfiguracije, u kojem se Nginx koristi kao proxy poslužitelj i glavni poslužitelj Apache, ali to nas neće zanimati. Moramo instalirati Nginx kao samostalni web poslužitelj.

Nginx postavke su vrlo različite - postoji samo jedna glavna konfiguracijska datoteka i datoteke za virtualne hostove. Konfiguracija iz svakog direktorija, kao u Apacheu, nije podržana.

  • /etc/nginx/nginx.conf- glavna konfiguracijska datoteka
  • /etc/nginx/sites-available/*- konfiguracijske datoteke za virtualne hostove, drugim riječima, za svako mjesto.
  • /etc/nginx/sites-enabled/*- konfiguracijske datoteke aktiviranih stranica.

Zapravo, konfiguracijske datoteke za virtualna računala čitaju se samo iz direktorija s omogućenim web-mjestima, ali on sadrži veze na web-mjesta dostupna. Ovaj sustav je osmišljen kako bi omogućio privremeno onemogućavanje određenih stranica bez brisanja njihove konfiguracije. Sve ostale datoteke sadrže samo deklaracije varijabli i standardne postavke, koje nije potrebno mijenjati. Što se tiče nginx.conf, sve datoteke iz sites-enables su uključene u njega, i stoga mogu sadržavati potpuno iste upute. Sada pogledajmo glavnu konfiguracijsku datoteku:

sudo vi /etc/nginx/nginx.conf

Kao što vidite, datoteka je podijeljena na dijelove. Opća struktura Je li ovo:

globalne opcije
događaji()
http(
poslužitelj (
mjesto()
}
poslužitelj()
}
pošta()

  • globalne opcije odgovorni su za rad cjelokupnog programa.
  • događanja- ovaj odjeljak sadrži postavke za rad s mrežom.
  • http- sadrži postavke web poslužitelja. Trebao bi sadržavati odjeljak poslužitelja za fino podešavanje svake stranice.
  • poslužitelj- ovaj odjeljak sadrži postavke za svaku stranicu koja se nalazi na web poslužitelju.
  • mjesto- odjeljak lokacije može se nalaziti samo unutar odjeljka poslužitelja i sadrži postavke samo za određeni zahtjev.
  • pošta- sadrži postavke proxyja za poštu.

Prije nego prijeđemo na opcije, moramo reći još nekoliko riječi o sintaksi retka u konfiguracijskoj datoteci. Ovako izgleda:

vrijednost parametra dodatna_vrijednost...;

Red mora završavati sa ";", a sve otvorene zagrade ( moraju biti zatvorene.

Sada kada ste malo proučili globalnu strukturu, možete prijeći na promatranje samih parametara. Nema mnogo globalnih opcija:

  • korisnik- korisnik u čije ime će se program izvoditi.
  • radnički_procesi- postavlja koliko procesa treba pokrenuti da bi se paralelizirao rad programa; ne morate pokretati više procesa nego što imate jezgri. Možete postaviti parametar auto a zatim će program sam odrediti ovaj broj.
  • pid= pid datoteka programa.
  • worker_rlimit_nofile- označava najveći broj datoteka koje program može otvoriti. Izračunava se kao radnički_procesi * radničke_veze* 2.

Završili smo s globalnim opcijama, nije ih bilo puno i nisu bile toliko zanimljive. Mnogo zanimljivije u smislu optimizacije su opcije iz odjeljka događaja:

  • radničke_veze- broj veza koje program može istovremeno obraditi na jednom procesu. Ako pomnožimo worker_process s ovim parametrom, dobivamo maksimalan broj korisnika koji se mogu spojiti na poslužitelj u isto vrijeme. Preporuča se postaviti vrijednost od 1024 do 4048.
  • više_prihvatiti- dopustite prihvaćanje više veza u isto vrijeme, uključite ili isključite parametar.
  • koristiti- način rada s mrežnim stogom. Zadana postavka je anketa, ali na Linuxu je učinkovitije koristiti epoll.
  • poslati datoteku- koristite metodu slanja podataka sendfile. Vrijednost je uključena.
  • tcp_nodelay, tcp_nopush- poslati zaglavlja i početak datoteke u jednom paketu. Vrijednost je uključena.
  • keepalive_timeout- vrijeme čekanja prije zatvaranja veze za održavanje aktivnosti, zadano je 65, ali se može smanjiti na 10 sekundi.
  • keepalive_requests- maksimalan broj keepalive veza s jednog klijenta, preporučeno 100.
  • reset_timeout_connection- prekinuti veze nakon isteka vremena. Vrijednost je uključena.
  • predmemorija_otvorene_datoteke- predmemorija podataka o otvorenim datotekama. Redak postavki izgleda ovako: open_file_cache max=200000 inactive=20s; max - maksimalan broj datoteka u predmemoriji, vrijeme predmemoriranja.
  • otvorena_datoteka_cache_valjana- označava nakon kojeg vremena informacije treba izbrisati iz predmemorije. Na primjer: open_file_cache_valid 30s;
  • otvorena_datoteka_cache_min_uses- predmemorirati informacije o datotekama koje su otvorene barem određeni broj puta.
  • otvorene_datoteke_cache_greške- predmemorirati informacije o datotekama koje nedostaju, vrijednost uključena.

Glavni parametri su pregledani. Ove postavke pomoći će vam da dobijete bolje performanse nginxa. Pogledat ćemo odjeljke poslužitelja i lokacije pri postavljanju virtualnih hostova.

Postavljanje Gzip kompresije

Kompresija sadržaja je neophodna kako bi se smanjila veličina podataka koje preuzima preglednik. To ubrzava učitavanje stranice, ali dodatno opterećuje procesor poslužitelja. Da biste omogućili kompresiju u http odjeljku morate dodati sljedeći parametar:

Ova se direktiva također može koristiti u odjeljku poslužitelja, tada će raditi samo za navedenu virtualnu domenu. Zatim konfiguriramo parametre kompresije pomoću sljedećih opcija:

  • gzip_minimalna_duljina- minimalna duljina stranice u bajtovima pri kojoj se mora koristiti kompresija, na primjer, 1000 (1 kb)
  • gzip_proksiran- da li je potrebno komprimirati proxied zahtjeve, bilo koji kaže da sve treba komprimirati.
  • gzip_vrste- vrste datoteka koje je potrebno komprimirati, na primjer: tekst/obična aplikacija/xml aplikacija/x-javascript tekst/javascript tekst/css tekst/json;
  • gzip_onemogući "msie6"- kompresija nije podržana u IE 6, pa je onemogućujemo.
  • gzip_comp_level- razina kompresije, dostupne opcije od 1 do 10. 1 - minimalna, 10 - maksimalna kompresija.

Postavljanje virtualnih hostova

Kao što znate, poslužitelj može ugostiti više web stranica. Svi zahtjevi dolaze na IP poslužitelja, a nginx već određuje, na temelju domene, koji sadržaj treba poslužiti. Da bi nginx znao što pripada kojoj domeni treba ga konfigurirati virtualni hostovi. Svaki host se obično nalazi u zasebnoj datoteci. Konfiguracija glavnog računala nalazi se u odjeljku poslužitelja, ali budući da se sve datoteke s omogućenih web-mjesta uvoze u odjeljak http, logika strukture konfiguracijske datoteke nije prekinuta.

Pogledajmo primjer postavljanja:

vi /etc/nginx/sites-enabled/site.conf

  • slušaj 80- navodi da se veza treba slušati na portu 80, također može sadržavati opciju zadani poslužitelj, što znači da će ova domena biti otvorena ako domena nije navedena u zahtjevu.
  • korijen /var/www/html- direktorij u kojem se nalaze datoteke stranice.
  • indeks indeks.html- stranica koja će se otvoriti prema zadanim postavkama.
  • naziv_poslužitelja - Naziv domene mjesto.
  • pristup_log- datoteka za snimanje dnevnika zahtjeva prema poslužitelju, može se koristiti i globalno u http odjeljku i za određenu vrstu datoteke na lokaciji.
  • dnevnik_pogreški- zapisnik pogrešaka web poslužitelja, može prihvatiti dodatni parametar koji ukazuje na detalje zapisnika. warn - maksimalno, crit - samo kritične pogreške.

Ovo su sve osnovne postavke za virtualni host, nakon čega će već raditi. Ali postoji i odjeljak lokacije koji vam omogućuje da konfigurirate ponašanje poslužitelja za određene direktorije i datoteke. Sintaksa lokacije je:

adresa lokacije()

I izravni upit u vezi s korijenom poslužitelja i regularni izrazi mogu se koristiti kao adresa. Za korištenje regularnih izraza, ispred njega stoji znak "~". Pogledajmo primjere u nastavku, ali za sada pogledajmo moguće direktive:

  • dopustiti- dopustite pristup lokaciji za korisnike, svi - svi, također možete odrediti ip ili podmrežu.
  • poricati- zabraniti pristup lokaciji, svima - svima.
  • pokušajte datoteke- pokušava otvoriti datoteke određenim redoslijedom, otvara prvu pronađenu datoteku. Na primjer, ova konstrukcija: $uri $uri/index.html $uri.html =404; prvo pokušava otvoriti $uri, zatim index.html, ako $uri.html nije pronađen, a zatim, ako nijedna od prepozicijskih datoteka ne postoji, daje pogrešku 404.
  • ističe- postavlja vrijeme predmemoriranja preglednika za dati element, na primjer, 1d - jedan dan, 2h - dva sata, 30s - 30 sekundi.

Osim ovih glavnih direktiva, ovdje se mogu koristiti i druge. Za više detalja pogledajte službenu dokumentaciju. Pogledajmo nekoliko primjera:

Nemoj prijavljivati ​​favicon:

lokacija = /favicon.ico (
log_not_found isključen;
pristup_odjava;
}

Zabrani pristup datotekama koje počinju s točkom:

mjesto ~ /\. (
zanijekati sve;
}

Spremi redovne datoteke u predmemoriju 90 dana:

lokacija ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2 |doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ (
pristup_odjava; log_not_found isključen; ističe 90d;

Nginx je popularan i moćan web poslužitelj i obrnuti proxy.

Nginx ima mnogo prednosti, ali njegove postavke su prilično složene i nisu uvijek jasne početnicima. Ovaj će vam vodič pomoći razumjeti osnovne parametre, sintaksu i konfiguracijske datoteke Nginxa.

Bilješka: Ovaj vodič je napravljen na Ubuntu 12.04.

Nginx hijerarhija imenika

Nginx pohranjuje konfiguracijske datoteke u /etc/nginx direktorij.

Ovaj direktorij sadrži još nekoliko direktorija i modularne konfiguracijske datoteke.

cd /etc/nginx
je -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/

Korisnici Apachea već su upoznati s direktorijima dostupnih i omogućenih web-mjesta. Ovi imenici definiraju konfiguracije stranice. Datoteke se obično stvaraju i pohranjuju na dostupnim mjestima; sites-enabled pohranjuje samo konfiguracije omogućenih web stranica. Da biste to učinili, trebate stvoriti simboličku vezu između web-mjesta-dostupnih i web-mjesta-omogućenih.

Direktorij conf.d također se može koristiti za pohranu konfiguracija. Svaka datoteka s nastavkom .conf bit će pročitana kada se Nginx pokrene. Sintaksa takvih datoteka ne smije sadržavati pogreške.

Gotovo sve preostale datoteke pohranjene su u /etc/nginx, koji sadrži informacije o konfiguraciji za određene procese ili dodatne komponente.

Glavna Nginx konfiguracijska datoteka je nginx.conf.

nginx.conf datoteku

Datoteka nginx.conf čita odgovarajuće konfiguracijske datoteke i kombinira ih u jednu konfiguracijsku datoteku kada se poslužitelj pokrene.

Otvori datoteku:

sudo nano /etc/nginx/nginx.conf

korisnički www-podaci;
radnički_procesi 4;
pid /var/run/nginx.pid;
događaji (
radničke_veze 768;
#multi_accept on;
}
http(
. . .

Prvi redovi daju opće informacije o Nginxu. Redak korisnik www-data specificira korisnika s kojim je poslužitelj pokrenut.

Direktiva pid navodi gdje treba pohraniti Obradite PID-ove Za unutarnju upotrebu. Redak worker_processes određuje broj procesa koje Nginx može podržavati istovremeno.

Također možete navesti zapisnike u ovom dijelu datoteke (na primjer, dnevnik pogrešaka je definiran pomoću direktive error_log).

Nakon općih informacija o poslužitelju nalazi se odjeljak s događajima. Upravlja rukovanjem Nginx vezama. Nakon njega slijedi blok http. Prije nego što nastavimo s konfiguracijama web poslužitelja, moramo razumjeti kako je Nginx konfiguracijska datoteka formatirana.

Struktura Nginx konfiguracijske datoteke

Nginx konfiguracijska datoteka podijeljena je u blokove.

Prvi blok su događaji, zatim slijedi http i počinje glavna hijerarhija konfiguracija.

Pojedinosti o konfiguraciji http bloka raspoređene su pomoću zatvorenih blokova koji nasljeđuju svojstva od bloka u kojem se nalaze. http blok pohranjuje većinu općih Nginx konfiguracija, koje su podijeljene u blokove poslužitelja, koji su opet podijeljeni u blokove lokacije.

Kada konfigurirate Nginx, važno je zapamtiti sljedeće pravilo: što je viša razina konfiguracije, više blokova nasljeđuje ovu konfiguraciju; što je niža razina konfiguracije, to je više "individualna". To jest, ako se parametar X mora koristiti u svakom bloku poslužitelja, tada se takav parametar mora staviti u blok http.

Ako pažljivo pogledate datoteku, primijetit ćete da sadrži mnogo opcija koje određuju ponašanje programa u cjelini.

Na primjer, da biste konfigurirali kompresiju datoteke, trebate postaviti sljedeće parametre:

gzip uključen;
gzip_onemogući "msie6";

Ovo će omogućiti gzip podršku za komprimiranje podataka poslanih klijentu i onemogućiti gzip za Internet Explorer 6 (jer ovaj preglednik ne podržava kompresiju podataka).

Ako neki parametar treba imati drugačije značenje u nekoliko blokova poslužitelja, tada se takav parametar može postaviti na vrhunska razina a zatim ga nadjačati unutar samih blokova poslužitelja. Kao rezultat toga, Nginx će izvršiti parametar najniže razine.

Ovo slojevitost konfiguracija izbjegava potrebu upravljanja višestrukim identične datoteke. Također, ako ste zaboravili definirati parametre na najniža razina, Nginx će jednostavno implementirati zadane opcije.

http blok u datoteci nginx.conf završava ovako:

uključi /etc/nginx/conf.d/*.conf;
uključi /etc/nginx/sites-enabled/*;

To znači da će blokovi poslužitelja i lokacije, koji definiraju postavke za određene stranice i URL-ove, biti pohranjeni izvan ove datoteke.

To omogućuje modularnu konfiguracijsku arhitekturu u kojoj se mogu stvarati nove datoteke za posluživanje novih stranica. Također vam omogućuje grupiranje sličnih datoteka.

Zatvorite datoteku nginx.conf. Sada morate proučiti postavke pojedinačnih stranica.

Nginx virtualni blokovi

Blokovi poslužitelja u Nginxu analogni su Apache virtualnim hostovima (ali zbog praktičnosti nazivaju se i virtualnim hostovima). U biti, blokovi poslužitelja jesu tehnički podaci odvojene web stranice smještene na istom poslužitelju.

U imeniku dostupnih stranica možete pronaći zadanu datoteku bloka poslužitelja koja dolazi s poslužiteljem. Ova datoteka sadrži sve potrebne podatke za održavanje stranice.

cd stranice-dostupne
sudo nano zadano

korijen /usr/share/nginx/www;
index index.html index.htm;
server_name localhost;
mjesto/(

}
mjesto /doc/ (

alias /usr/share/doc/;
automatsko indeksiranje uključeno;
dopusti 127.0.0.1;
zanijekati sve;

Zadana datoteka je vrlo dobro komentirana, ali u gornjem primjeru komentari su izostavljeni radi jednostavnosti i praktičnosti.

Blok poslužitelja uključuje sve postavke smještene između vitičastih zagrada:

poslužitelj (
. . .
}

Ovaj se blok postavlja u datoteku nginx.conf blizu kraja http bloka pomoću direktive include.

Korijenska direktiva određuje direktorij u koji će biti pohranjen sadržaj stranice. Nginx će u ovom direktoriju tražiti datoteke koje traži korisnik. Prema zadanim postavkama ovo je /usr/share/nginx/www.

Napomena: svi redovi završavaju točkom i zarezom. Ovo je način na koji Nginx odvaja jednu direktivu od druge. Ako nema točke sa zarezom, Nginx će pročitati dvije direktive (ili više direktiva) kao jednu direktivu s dodatnim argumentima.

Direktiva indeksa navodi datoteke koje će se koristiti kao indeks. Web poslužitelj će provjeriti datoteke redoslijedom kojim su navedene. Ako stranica nije zatražena, blok poslužitelja će pronaći i vratiti datoteku index.html. Ako ne može pronaći tu datoteku, pokušat će obraditi index.htm.

server_name direktiva

Direktiva server_name sadrži popis imena domena koje će posluživati ​​ovaj blok poslužitelja. Broj domena je neograničen; Domene na popisu trebaju biti odvojene razmacima.

Zvjezdica (*) na početku ili kraju domene označava ime s maskom, pri čemu zvjezdica odgovara dijelu (ili više dijelova) imena. Na primjer, naziv *.example.com odgovarao bi imenima forum.example.com i www.animals.example.com.

Ako traženi url odgovara više od jedne direktive server_name, prvo će odgovoriti onom koja se točno podudara.

Ako adresa ne pronađe podudaranje, tražit će najviše dugo ime s maskom koja završava zvjezdicom. Ako ne pronađe takvo ime, vratit će prvi regularni izraz koji se podudara.

Nazivi poslužitelja koji koriste regularne izraze počinju tildom (~). Nažalost, ova tema je izvan opsega ovog članka.

Lokacijski blokovi

Lokacija/redak označava da će se direktive u zagradama primijeniti na sve tražene resurse koji ne odgovaraju nijednom drugom bloku lokacije.

Takvi blokovi mogu sadržavati uri put (na primjer /doc/). Za uspostavljanje potpunog podudaranja između lokacije i URI-ja koristi se simbol =. Znak ~ odgovara regularnim izrazima.

Tilda omogućuje način rada koji razlikuje velika i mala slova, dok tilda sa zvjezdicom omogućuje način rada koji nije osjetljiv na velika i mala slova.

Ako zahtjev u potpunosti odgovara bloku lokacije, tada poslužitelj zaustavlja pretragu i koristi takav blok. Ako poslužitelj ne pronađe potpuno odgovarajući blok lokacije, uspoređuje URI s parametrima direktiva lokacije. Nginx će odabrati blok koji koristi kombinaciju znakova ^~ i koji odgovara URI-ju.

Ako se opcija ^~ ne koristi, Nginx će odabrati najbliže podudaranje i izvršiti pretraživanje regularnog izraza kako bi pokušao pronaći jedan od dostupnih uzoraka. Ako nađe takav izraz, upotrijebi ga. Ako ne postoji takav izraz, tada poslužitelj koristi prethodno pronađeno URI podudaranje.

Kao posljednja napomena, Nginx preferira točna podudaranja. Ako nema takvih podudaranja, traži regularni izraz i zatim pretražuje URI. Za promjenu prioriteta pretraživanja URI-ja, koristite kombinaciju znakova ^~.

try_files direktiva

Direktiva try_files je vrlo koristan alat, koji provjerava datoteke zadanim redoslijedom i koristi prvu pronađenu datoteku za obradu zahtjeva.

To vam omogućuje korištenje dodatni parametri odrediti kako će Nginx posluživati ​​zahtjeve.

Zadana konfiguracijska datoteka ima redak:

try_files $uri $uri/ /index.html;

To znači da kada se primi zahtjev koji poslužuje blok lokacije, Nginx će prvo pokušati poslužiti uri kao datoteku (ovo ponašanje je određeno varijablom $uri).

Ako poslužitelj ne pronađe podudaranje za varijablu $uri, pokušat će koristiti uri kao direktorij.

Koristeći kosu crtu na kraju, poslužitelj provjerava postojanje direktorija, na primjer $uri/.

Ako nije pronađena datoteka ili direktorij, Nginx izvršava zadanu datoteku (u ovom slučaju index.html u korijenskom direktoriju bloka poslužitelja). Svaka direktiva try_files koristi posljednji parametar kao zamjenu, tako da datoteka mora postojati na sustavu.

U slučaju da web poslužitelj ne pronađe podudaranje u prethodnim parametrima, može vratiti stranicu s pogreškom. Da biste to učinili, upotrijebite znak jednakosti i šifru pogreške.

Na primjer, ako lokacija/blok ne može pronaći traženi resurs, može vratiti pogrešku 404 umjesto datoteke index.html:

try_files $uri $uri/ =404;

Da biste to učinili, morate staviti znak jednakosti i postaviti šifru pogreške kao zadnji parametar (=404).

Dodatne mogućnosti

Direktiva aliasa omogućuje Nginxu posluživanje stranica bloka lokacije izvan zadanog direktorija (na primjer, izvan korijena).

Na primjer, datoteke zatražene iz /doc/ bit će poslužene iz /usr/share/doc/.

Direktiva autoindex on omogućuje vam da omogućite popis Nginx direktorija za danu direktivu lokacije.

Redovi za dopuštanje i zabranu kontroliraju pristup imenicima.

Zaključak

Web poslužitelj Nginx bogat je značajkama i vrlo je moćan, ali njegova terminologija i opcije mogu biti zbunjujuće.

Nakon što shvatite Nginx konfiguracije i naučite kako raditi s njima, dobit ćete sve prednosti ovog moćnog i laganog alata.

Oznake: ,

Najbolji članci na temu