Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Zanimljivo
  • Kako kreirati virtuelne hostove u nginxu. Nginx: konfiguracija i instalacija

Kako kreirati virtuelne hostove u nginxu. Nginx: konfiguracija i instalacija

Nginx? Svrha, karakteristike, opcije podešavanja - to su stvari sa 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. Pod njegovom kontrolom je i upravljanje procesom rada. Zadatak potonjeg je da obrađuje dolazne zahtjeve. Nginx koristi model zasnovan na događajima. Mehanizmi zavisni od operativni sistem kako bi se postigla efikasna distribucija zahtjeva direktno između radnih procesa. Njihov broj je uvijek naveden u konfiguracijski fajl. Vrijednost može biti fiksna ili postavljena automatski, na osnovu broja procesorska jezgra, sa kojim možete raditi. U nginxu, sistem i moduli se konfigurišu pomoću konfiguracione datoteke. Stoga, ako trebate nešto promijeniti, onda to trebate potražiti. Obično se nalazi u direktivi /etc/nginx (ali putanja se može promijeniti kada se koriste drugi sistemi) i ima ekstenziju .conf.

Pokretanje, ponovno pokretanje i evidencija

Da biste to učinili, morate učiniti da izvršna datoteka radi. Konfigurisanje nginx servera moguće je samo kada je pokrenut. Kontrolisano pozivom izvršnu datoteku sa parametrom -s. Da biste to učinili, koristite sljedeću notaciju:

nginx -s signal

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

  1. Stani. Koristi se za brzo zaustavljanje rada.
  2. Ponovo učitaj. Komanda je potrebna za ponovno učitavanje konfiguracijske datoteke. Poenta je da se bilo kakve promjene neće primijeniti dok je datoteka pokrenuta. A da bi stupili na snagu, potrebno je ponovno pokretanje. Čim se primi ovaj signal, glavni proces će početi provjeravati ispravnost sintakse konfiguracijske datoteke i pokušati primijeniti upute. Ako ne uspije, vratit će promjene i raditi sa starim postavkama. Ako je sve bilo uspješno, tada će se pokrenuti novi radni procesi, a starim će biti poslat zahtjev za prekid.
  3. Prestani. Koristi se za nesmetan završetak radova. Koristi se ako trebate čekati dok se trenutni zahtjevi ne završe s servisiranjem.
  4. Ponovo otvori. Zatvorite i otvorite datoteke dnevnika.

Korištenje uslužnih programa

Procesi se također mogu konfigurirati korištenjem Unix alata (uslužni program kill će se uzeti u obzir kao primjer). Obično koriste mehanizam za slanje signala procesu direktno sa podacima. Povezani su pomoću ID-a. Ovi podaci su pohranjeni u datoteci nginx.pid. Recimo da nas zanima proces br. 134. Zatim za nesmetan završetak moramo poslati sljedeće informacije:

kill -s NAPUSTI 1628

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

ps -ax | grep nginx

Odnosno, kao što vidite, kada se koriste dodatni alati, naznačeno je da se koristi. Sada se fokusirajmo na to kako se radi nginx konfiguracija.

Struktura konfiguracijske datoteke

Instalacija i konfiguracija nginx-a uključuje rad sa modulima. Konfiguriraju se pomoću direktiva koje su navedene u konfiguracijskoj datoteci. Jednostavni su i blokovi. Prvi tip direktive sastoji se od imena i parametara, koji su odvojeni razmacima, a završavaju se tačkom i zarezom (;). Blok ima sličnu strukturu. Ali u ovoj direktivi, umjesto završetka, postavljen je skup dodatna uputstva, koji se stavljaju u vitičaste zagrade ((uputstva)). Ako mogu sadržavati imena i parametre drugih procesa, onda se takve konstrukcije nazivaju kontekstom. Primjeri uključuju http, lokaciju i server.

Posluživanje statičkog sadržaja

Ovo je jedan od najvažnijih zadataka sa kojima se suočava nginx konfiguracija. Pod distribucijom statističkog sadržaja podrazumijevamo slike i HTML stranice (ne dinamičke). Recimo da nam je potreban jednokratni posao postavljanja nix nginx klastera. Da li je to teško uraditi? Ne, i pogledajmo primjer. Prije nego što ga započnete, potrebno je detaljno opisati uslove zadatka. Dakle, ovisno o zahtjevima, datoteke će doći iz različitih lokalnih direktorija. Dakle, u /data/www imamo HTML dokumente. I direktorij /data/images sadrži slike. Optimalno podešavanje nginx u ovom slučaju zahtijeva uređivanje konfiguracijske datoteke, u kojoj trebate konfigurirati serverski blok unutar http. Dvije lokacije će se također koristiti za podršku.

Implementacija: server

Dakle, prvo trebamo kreirati same direktorije i smjestiti datoteke u njih neophodna proširenja(morate dodati sadržaj u html). Zatim otvorite konfiguracionu datoteku. Podrazumevano, već sadrži nekoliko serverskih blokova, koji su uglavnom komentarisani. Da bi se postigli optimalni rezultati, ovaj proces se mora obaviti za sve zadane komponente. Zatim dodajemo novi blok servera koristeći sljedeći kod:

Konfiguracijski fajl može raditi s nekoliko takvih blokova. Ali moraju se razlikovati po nazivima i portovima preko kojih se primaju podaci.

Realizacija: lokacija

Definirano unutar servera:

Prisustvo znaka “/” je neophodno da bismo uporedili primljene podatke i videli da li se takva adresa iz obrađenog zahteva nalazi ovde. Ako nema problema, navedite putanju /data/www do potreban fajl, šta je u ovome lokalni sistem. Ako postoji podudaranje s nekoliko blokova, tada se odabire onaj s najdužim prefiksom. U datom primjeru njegova dužina je jednaka jedan, odnosno koristit će se isključivo ako nema „konkurenta“. Sada da ga poboljšamo:

lokacija /slike/ (

Kako možete znati da li tražimo slike? Hajde sada da kombinujemo sve razvoje koji su prethodno napravljeni i uključenu konfiguraciju ovog trenutka kao što slijedi:

lokacija /slike/ (

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

Kako primjer funkcionira

Dakle, kada stignu zahtjevi koji počinju sa /images, server će poslati fajlove iz odgovarajućeg direktorija korisniku. Ako ga nema, bit će prenesene informacije koje ukazuju na grešku 404. Ako je nginx konfiguriran na lokalnom računaru, tada ćemo kada zatražimo http://localhost/images/example.png primiti datoteku čija je lokacija /data/images/ primjer.png. Ako navedete jedan znak “/”, pretraga će se izvršiti u /data/www direktoriju. Ali promijenili smo samo konfiguraciju. Da bi počeo da radi, potrebno ga je ponovo pokrenuti. Da biste to učinili, koristite naredbu za ponovno učitavanje nginx -s. U slučaju kada normalan rad nije moguće, onda možete potražiti uzrok problema u datotekama error.log i access.log koje se nalaze u /usr/local/nginx/logs direktivi.

Kreiranje jednostavnog proxy servera

Što se tiče nginxa, može se reći - postavljanje ovog objekta je jedna od uobičajenih upotreba (i usput, prilično jednostavna). Koristi princip servera koji prima zahtjeve, a zatim ih preusmjerava na potrebne stranice. Nakon toga se od njih očekuje odgovor koji ih upućuje na onoga ko je zadao zadatak. Pogledajmo primjer kreiranja bazne tačke. Obradit će zahtjeve korisnika i pružiti im slike iz lokalnog direktorija. Dakle, u http blok dodajemo još jedan server sa sljedećim sadržajem:

Sada mi dozvolite da to dešifrujem za vas: kreira se jednostavan server. Slušaće. Ako ne navedete slušanje, server će raditi na 80. Svi zahtjevi unutar lokalnog područja bit će prikazani sistem podataka, koji su usmjereni na /data/up1 direktorij (naravno, morat će biti kreiran prije toga). Da biste to mogli provjeriti, morate tamo postaviti datoteku index.html. Postavljanjem root direktive u kontekst servera, možemo koristiti lokaciju pod bilo kojim uslovima (pošto ovo uklanja ograničenja pristupa). Sada radimo na kreiranju proxy servera. Da bi to funkcioniralo, potrebna nam je proxy_pass direktiva, za koju će protokol, ime i port objekta biti specificirani kao parametri (ako lokalna veza izgledat će kao http://localhost:8080). Dobićete sledeći rezultat:

proxy_pass http://localhost:8080;

lokacija /slike/ (

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

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

root /data/images;

Konačna konfiguracija proxy servera izgleda ovako:

proxy_pass http://localhost:8080/;

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

root /data/images;

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

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

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

Zašto je Apache loš?

Prvo moramo objasniti kako oni funkcioniraju općenito. mrežni serveri. Oni koji su upoznati sa mrežnim programiranjem znaju da u suštini postoje tri modela rada servera:

  1. Dosljedno. Server otvara utičnicu za slušanje i čeka da se pojavi veza (u blokiranom je stanju dok čeka). Kada veza stigne, server je obrađuje u istom kontekstu, zatvara vezu i ponovo čeka vezu. Očigledno, ovo je daleko od najboljeg načina, pogotovo kada rad s klijentom traje dugo i ima puno veza. Osim toga, serijski model ima mnogo više nedostataka (na primjer, nemogućnost korištenja više procesora), a u realnim uslovima praktično se ne koristi.
  2. Višeprocesni (višestruki). Server otvara utičnicu za slušanje. Kada veza stigne, ona je prihvata, nakon čega kreira (ili uzima iz grupe prethodno kreiranih) novi proces ili nit koja može raditi sa vezom koliko god želi, a po završetku posla prekida ili povratak u bazen. Glavna nit je u međuvremenu spremna da prihvati novu vezu. Ovo je najviše popularan model, jer je relativno jednostavan za implementaciju, omogućava izvođenje složenih i dugotrajnih proračuna na svakom klijentu i koristi sve dostupne procesore. Primjer njegove upotrebe - Web- Apache server. Međutim, ovaj pristup ima i nedostatke: sa velikim brojem istovremenih veza, stvara se mnogo niti (ili, još gore, procesa), a operativni sistem troši mnogo resursa na prebacivanje konteksta. Posebno je loše kada klijenti veoma sporo prihvataju sadržaj. Ovo rezultira stotinama niti ili procesa koji su samo zauzeti slanjem podataka sporim klijentima, što stvara dodatno opterećenje na OS planeru, povećava broj prekida i troši dosta memorije.
  3. Neblokirajuće utičnice/mašina stanja. Server radi unutar jedne niti, ali koristi neblokirajuće utičnice i mehanizam prozivanja. One. server na svakoj iteraciji beskonačna petlja Odabire iz svih utičnica onaj koji je spreman za primanje/slanje podataka pomoću poziva select(). Nakon što je socket odabran, server mu šalje podatke ili ih čita, ali ne čeka potvrdu, već ide u početno stanje i čeka događaj na drugom soketu ili obrađuje sljedeći u kojem se događaj dogodio tokom obrade prethodni. Ovaj model koristi procesor i memoriju vrlo efikasno, ali je prilično složen za implementaciju. Osim toga, unutar ovog modela, obrada događaja na soketu mora se odvijati vrlo brzo - inače će se mnogi događaji akumulirati u redu čekanja i na kraju će se on preliti. To je upravo model na kojem radi nginx. Osim toga, omogućava vam pokretanje više radnih procesa (tzv. radnika), tj. može koristiti više procesora.

Dakle, zamislite sledeću situaciju: 200 klijenata sa 256 Kbit/s kanalom se povezuje na HTTP server sa 1 Gbit/s kanalom:

Šta se dešava u slučaju Apača? Kreira se 200 niti/procesa koji relativno brzo generišu sadržaj (ovo bi moglo biti nešto slično dinamičke stranice i statičke datoteke koje se čitaju s diska), ali ih polako isporučuju klijentima. Operativni sistem je primoran da se nosi sa gomilom 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 ovo će dovesti do blokada unutar nginxa. Naravno, postoji rješenje: nginx može proxy takve zahtjeve (za generiranje sadržaja) na bilo koji drugi web server (na primjer, isti Apache) ili na FastCGI server.

Razmotrimo mehanizam rada kombinacije nginx kao „glavnog“ servera i Apachea kao servera za generisanje dinamičkog sadržaja:

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

Nakon što nginx pročita cijeli odgovor, otvara vezu s Apacheom. Potonji radi svoj posao (generira dinamički sadržaj), nakon čega svoj odgovor šalje nginx-u, koji ga baferuje u memoriju ili privremeni fajl. U međuvremenu, Apache oslobađa resurse. Zatim, nginx polako isporučuje sadržaj klijentu, trošeći redove veličine manje resursa nego Apache.

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

Instalacija

Jer nginx tek počinje da dobija na popularnosti, postoje neki problemi sa binarnim paketima, pa budite spremni da ga sami prevedete. Obično nema problema s ovim, samo trebate pažljivo pročitati izlaz naredbe./configure --help i odabrati opcije kompilacije koje su vam potrebne, na primjer ove:

./configure\
--prefix=/opt/nginx-0.6.x \ # instalacijski prefiks
--conf-path=/etc/nginx/nginx.conf \ # lokacija konfiguracionog fajla
—pid-path=/var/run/nginx.pid \ # ... i pid datoteku
—user=nginx \ # korisničko ime pod kojim će se nginx pokrenuti
—with-http_ssl_module —with-http_gzip_static_module —with-http_stub_status_module \ # lista potrebnih
—bez-http_ssi_module —bez-http_userid_module —bez-http_autoindex_module —bez-http_geo_module —bez-http_referer_module —bez-http_memcached_module —bez-http_limit_zone_module ... i unmodule

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

Pored toga, u Gentoo-u možete koristiti ebuild iz standardnog stabla portova; u RHEL/CentOS od epel repozitorija (koje 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.

Konfiguracioni fajl

Nginx konfiguracijski fajl je vrlo zgodan i intuitivan. Obično se zove nginx.conf i nalazi se u $prefix/conf/ ako lokacija nije zaobiđena tokom kompilacije. Volim da ga stavim u /etc/nginx/, kao i programeri svih gore navedenih paketa.

Struktura konfiguracijskog fajla je sljedeća:

korisnik nginx; # korisničko ime sa čijim pravima će nginx raditi
worker_processes 1; # broj radnih procesa
događaji (
<…># ovaj blok specificira mehanizam prozivanja koji će se koristiti (vidi dolje) i maksimalan broj mogućih konekcija
}

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

# opis servera (ovo se zove VirtualHost u apacheu)
server (
# adresa i ime servera
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 nivoima
lokacija /abcd/ (
<директивы>;
}
# Osim toga, možete napraviti lokaciju koristeći regularni izraz, na primjer ovako:
lokacija ~ \.php$ (
<директивы>;
}
}

# drugi server
server (
slušaj *:80;
server_name ccc.bbb;

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

Imajte na umu da se svaka direktiva mora završavati tačkom i zarezom.
Reverse proxying i FastCGI

Dakle, gore smo pogledali prednosti frontend + backend šeme, shvatili instalaciju, strukturu i sintaksu konfiguracijske datoteke, a sada ćemo pogledati kako implementirati obrnuto proxy u nginx.

I vrlo je jednostavno! Na primjer ovako:

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

U ovom primjeru, svi zahtjevi koji padaju na lokaciju / biće proksi serveru 1.2.3.4, port 8080. Ovo može biti ili apache ili bilo koji drugi http server.

Međutim, postoji nekoliko suptilnosti koje se odnose na činjenicu da će aplikacija smatrati 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, pretpostavimo da radi na hostu 1.2.3.4 i portu 8080 (prema tome, generiraj pogrešna preusmjeravanja i apsolutne veze). Kako bih izbjegao ove probleme bez ponovnog pisanja aplikacije, sljedeća konfiguracija mi je zgodna:
Nginx sluša eksterni interfejs na portu 80.

Ako se backend (recimo Apache) nalazi na istom hostu kao i nginx, onda "sluša" na portu 80 na 127.0.0.1 ili drugoj internoj IP adresi.

nginx konfiguracija u ovom slučaju izgleda ovako:

server (
slušaj 4.3.2.1:80;
# postavite zaglavlje Host i X-Real-IP: za svaki zahtjev koji se šalje backendu
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
}

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

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

server (
<…>

# lokacija na koju će ići zahtjevi za php skripte
lokacija ~ .php$ (
fastcgi_pass 127.0.0.1:8888; # odredite adresu i port fastcgi servera,
fastcgi_index index.php; # ...indeks fajl

# i neke parametre koje treba proslijediti fastcgi serveru kako bi razumio koju skriptu treba izvršiti i s kojim parametrima:
fastcgi_param SCRIPT_FILENAME /usr/www/html$fastcgi_script_name; # ime skripte
fastcgi_param QUERY_STRING $query_string; # string 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 sa regularnim izrazima imaju visok "prioritet", svi ne-php zahtjevi će pasti ovdje.

lokacija/(
root /var/www/html/
}

Statika

Da biste manje učitavali pozadinu, bolje je opsluživati ​​statičke datoteke samo preko nginx-a - on se bolje nosi s tim zadatkom, jer troši znatno manje resursa na svaki zahtjev (nema potrebe za stvaranjem novog procesa, ali nginx proces obično troši manje memorije, i može poslužiti mnogim vezama).

U konfiguracijskoj datoteci to izgleda otprilike ovako:

server (
slušaj *:80;
server_name myserver.com;

Lokacija/(
proxy_pass


">http://127.0.0.1:80;

}

# pretpostavimo da su svi statički fajlovi u /files
lokacija /fajlovi/ (
root /var/www/html/; # označava putanju do fs
ističe 14d; # dodajte zaglavlje Expires:
error_page 404 = @back; # i ako datoteka nije pronađena, šaljemo je na imenovanu lokaciju @back
}

# zahtjevi iz /files za koje nije pronađena datoteka šalju se na pozadinu, a može se ili generirati potreban fajl, ili prikaži prelepa poruka o grešci
lokacija @pozadi (
proxy_pass
"title="http://127.0.0.1:80;

">http://127.0.0.1:80;

}

Ako sva statika nije smještena u određeni direktorij, onda koristite 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 što je gore, samo svi zahtjevi koji završavaju jednim od navedenih sufiksa ići će na ovu lokaciju
root /var/www/html/;
error_page 404 = @back;
}

Nažalost, nije implementiran u nginx asinhroni rad sa fajlovima. Drugim riječima, nginx worker je blokiran na I/O operacijama. Dakle, ako imate puno statičnih fajlova i, posebno ako se čitaju sa 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 ). Ovo, naravno, povećava opterećenje OS-a, ali se ukupne performanse povećavaju. Za rad sa tipičnom količinom statičkog sadržaja (ne baš velikim brojem relativno malih datoteka: CSS, JavaScript, slike), dovoljna su jedan ili dva toka posla.

Nastavlja se

Linkovi

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

Nginx je web server i email proxy koji je javno dostupan od 2004. Razvoj projekta započeo je 2002. godine; na ruskom ime zvuči kao engine-ex. Kao kreacija poznatog programera Igora Sysoeva, Nginx je prvobitno bio namijenjen kompaniji Rambler. Dizajniran je za operativne sisteme koji pripadaju Unix-sličnoj grupi. Sklop je uspješno testiran na OpenBSD, FreeBSD, Linux, Mac OS X, Solaris. Na platformi Microsoft Windows Nginx je počeo da radi sa pojavom verzije 0.7.52 binarnog sklopa.

Statistike za mart 2011. pokazuju da je broj sajtova koje Nginx opslužuje već prešao granicu od 22 miliona. Danas Nginx koriste poznati projekti kao što su Rambler, Begun, Yandex, SourceForge.net, WordPress.com, vkontakte.ru i drugi. Zajedno sa lighttpd-om, Nginx se koristi za posluživanje statičkog sadržaja generiranog od strane "nezgodne" web aplikacije koja radi "pod autoritetom" drugog web servera.
Ali prije nego što uđemo u džunglu Nginxovih funkcionalnih mogućnosti, bilo bi korisno podsjetiti se što je web server općenito, a posebno proxy server.

Web server i proxy server

Web server je server koji prihvaća HTTP zahtjeve od web pretraživača i drugih klijenata i izdaje HTTP odgovore na njih. Potonji su obično zastupljeni HTML stranica, medijski tok, slika, datoteka, drugi podaci. Pod web serverom se podrazumijeva softver, obavljanje funkcija web servera i hardvera. Razmjena podataka i traženih informacija vrši se putem HTTP protokola.

Dodaj na listu dodatne funkcije web serveri uključuju: autorizaciju i autentifikaciju korisnika, evidentiranje njihovog pristupa resursima, HTTPS podršku za sigurnu komunikaciju sa klijentima i drugo. Najčešće korišteni web server na operativnim sistemima sličnim Unixu je Apache. Nginx trenutno zauzima treće mjesto na listi preferencija klijenata.

Proxy server omogućava klijentima da se bave upiti za pretraživanje To mrežne usluge u indirektnom obliku. To jest, to je server koji je specijaliziran za preusmjeravanje zahtjeva klijenata na druge servere. Povezivanjem na proxy server i traženjem resursa koji se nalazi na drugom serveru, klijent ima priliku da održi anonimnost i zaštiti računar od mrežnih napada. Proxy server daje tražene podatke klijentu ili iz vlastite keš memorije (ako postoji) ili nakon što ih je primio od specificirani server. U nekim slučajevima (da bi se postigli gore navedeni ciljevi), odgovor servera, kao i zahtjev klijenta, može biti promijenjen od strane proxy servera.

Najjednostavniji proxy server je Network Address Translator ili NAT. Godine 2000. ugrađen je proxy NAT Windows distribucija. Proxy serveri, kao i svaki fenomen, imaju dvije strane medalje, odnosno mogu se koristiti i za dobro i za zlo. Na primjer, uz njihovu pomoć oni koji se plaše sankcija za svoje nepristojne radnje na internetu skrivaju svoje IP adrese...

Nginx funkcionalni raspon:

  • održavanje servera indeksnih datoteka, statičkih upita, generiranje keš deskriptora otvorenih datoteka, lista datoteka;
  • ubrzano proxy, elementarna raspodjela opterećenja, tolerancija grešaka;
  • podrška za keširanje tokom ubrzanog proxyja i FastCGI;
  • podrška za FastCGI (ubrzane) i memcached servere;
  • modularnost, filteri, uključujući nastavak (opsezi bajtova) i kompresiju (gzip);
  • HTTP autentifikacija, odgovori u komadima, SSI filter;
  • paralelno izvršavanje nekoliko podupita na stranici obrađenoj preko FastCGI ili proxyja u SSI filteru;
  • StartTLS i SSL podrška;
  • mogućnost podrške ugrađenom Perlu;
  • jednostavna autentikacija (USER/PASS, LOGIN);
  • preusmjeravanje servera (IMAP/POP3 proxy) korisnika na IMAP/POP3 pozadinu korištenjem vanjskog servera za autentifikaciju (HTTP).

Za one koji nisu upoznati s ovom terminologijom, opis funkcionalnosti Nginxa može izgledati vrlo nejasan. Ali kada govorimo o specifičnim načinima korištenja ovog web servera, on će postepeno početi nestajati.

Arhitektura i konfiguracija

Radni procesi u Nginx-u istovremeno opslužuju više konekcija, pružajući im OS (operativni sistem) epoll (Linux), select i kqueue (FreeBSD) pozive. Podaci primljeni od klijenta se analiziraju pomoću državnog stroja. Raščlanjeni zahtjev se obrađuje od strane lanca modula specificiranih konfiguracijom. Odgovor klijentu se generira u baferima, koji mogu ukazivati ​​na dio datoteke ili pohranjivati ​​podatke u memoriju. Redoslijed prijenosa podataka do klijenta određen je lancima u koje su baferi grupirani.

Strukturno, Nginx HTTP server je podeljen na virtuelne servere, koji su zauzvrat podeljeni na lokacije. Virtuelni server ili direktiva mogu biti specificirani sa portovima i adresama za prijemne veze. Za lokaciju možete navesti tačan URI, dio URI-ja ili regularni izraz.Za online upravljanje memorijom koriste se skupovi, koji su niz unaprijed odabranih memorijskih blokova. Jedan blok, prvobitno dodijeljen za bazen, ima dužinu od 1 do 16 kilobajta. Podijeljena je na područja - zauzeta i nenaseljena. Kako se potonji popunjava, dodjela novog objekta osigurava se formiranjem novog bloka.

Geografska klasifikacija klijenata po njihovoj IP adresi se vrši u Nginx-u pomoću specijalni modul. Radix sistem stabla vam omogućava brz rad sa IP adresama, zauzimajući minimum memorije.

Prednosti Nginxa

Nginx se smatra veoma brzim HTTP server. Umjesto Apache-a ili zajedno s njim, Nginx se koristi za ubrzavanje obrade zahtjeva i smanjenje opterećenja na serveru. Činjenica je da ogromne mogućnosti, svojstvene modularnoj arhitekturi Apache-a, nisu potrebni većini korisnika. Ovu nezatraženu funkcionalnost morate platiti uz značajnu potrošnju sistemskih resursa. Obične stranice, po pravilu, karakterizira jasna "dominacija" statičkih datoteka (slike, stilski fajlovi, JavaScript), a ne skripti. Za prijenos ovih datoteka posjetitelju resursa nije potrebna nikakva posebna funkcionalnost, jer je zadatak vrlo jednostavan. To znači da web server 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 kroz njega. Međutim, da biste to učinili, morat ćete se malo pozabaviti promjenom veza na web stranici. Ako postoji veliki broj zahtjeva za statičke datoteke, ima smisla napraviti poseban server i na njemu instalirati Nginx.

Ubrzano proxying. Sa ovom opcijom, svi zahtjevi posjetitelja prvo idu na Nginx. Zahtjevi za statične datoteke (na primjer, slike, jednostavan HTML, JavaScript ili CSS fajl) Nginx ga obrađuje nezavisno. Ako korisnik pristupi određenoj skripti, on će preusmjeriti zahtjev na Apache odjel. Nema potrebe za bilo kakvom transformacijom koda stranice.

Ako je kanal od servera do posjetitelja i obrnuto spor, ova upotreba Nginxa može dati dodatni efekat. Nginx prosljeđuje zahtjev primljen od posjetitelja Apacheu na obradu. Nakon obrade zahtjeva, Apache prosljeđuje stranicu u Nginx i prekida vezu s osjećajem postignuća. Nginx sada može slati stranicu korisniku koliko god dugo želi, praktično bez trošenja sistemskih resursa. Rad Apache-a na njegovom mjestu bio bi praćen nerazumno velikim opterećenjem memorije kada bi radio gotovo u praznom hodu. Usput, ovaj slučaj upotrebe za Nginx ima drugo ime: "frontend 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 ćete možda morati izmijeniti kodove skripte.

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

Trenutno su dva web servera stekla najveću popularnost. To su Apache i Ngnix. Svaki od njih ima svoje prednosti i nedostatke. Apache je razvijen još 1995. godine i njegov razvoj nije uzeo u obzir sve moguće potrebe korisnika, troši mnogo memorije i sistemskih resursa, ali ga je lako konfigurirati. Nginx je razvijen nešto kasnije 2002. godine, uzimajući u obzir Apache-ove greške i fokusirajući se na maksimalne performanse.

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

Prvi korak je instaliranje samog web servera na sistem. Program je u službenim repozitorijumima, ali njegova verzija je već malo zastarjela, pa ako želite najnoviju verziju, trebate dodati PPA:

sudo apt-add-repository ppa:nginx/stable

Trenutno je verzija 1.10.0 dostupna u zvaničnim repozitorijumima, a 1.10.1 je već dostupna u stabilnom PPA. Ako vam verzija nije potrebna, možete i bez PPA. Zatim ažurirajte liste paketa iz spremišta:

I instalirajte ngnix:

sudo apt install nginx

Nakon instalacije Nginx serverće biti završeno, dodajte program u startup tako da se automatski pokrene:

sudo systemctl omogući nginx

Ako sada otvorite svoj pretraživač, vidjet ćete da nginx radi, ali još uvijek ga moramo konfigurirati.

Postavljanje Nginx Ubuntua

Postavljanje Nginx Ubuntua je mnogo komplikovanije od Apachea. Ovdje nećemo razmatrati sve opcije i mogućnosti programa, već ćemo govoriti samo o glavnim. Jedi razne konfiguracije, u kojem se Nginx koristi kao proxy server, i glavni server Apache, ali nas to neće zanimati. Moramo da instaliramo Nginx kao samostalni web server.

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

  • /etc/nginx/nginx.conf- glavni konfiguracioni fajl
  • /etc/nginx/sites-available/*- konfiguracioni fajlovi za virtuelne hostove, drugim rečima, za svaku lokaciju.
  • /etc/nginx/sites-enabled/*- konfiguracijski fajlovi aktiviranih stranica.

U stvari, konfiguracijske datoteke za virtuelne hostove čitaju se samo iz direktorija s omogućenim lokacijama, ali on sadrži veze do web lokacija koje su dostupne. Ovaj sistem je izmišljen da omogući privremeno deaktiviranje određenih sajtova 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, svi fajlovi sa site-enables su uključeni u njega, pa stoga mogu sadržati sve potpuno iste instrukcije. Sada pogledajmo glavnu konfiguracijsku datoteku:

sudo vi /etc/nginx/nginx.conf

Kao što vidite, fajl je podeljen na sekcije. Opća struktura je li ovo:

globalne opcije
događaji()
http(
server (
lokacija()
}
server()
}
mail()

  • globalne opcije odgovorni su za rad cjelokupnog programa.
  • događaji- ovaj odjeljak sadrži postavke za rad sa mrežom.
  • http- sadrži postavke web servera. Trebao bi sadržavati odjeljak za servere za fino podešavanje svake stranice.
  • server- ovaj odjeljak sadrži postavke za svaku stranicu koja se nalazi na web serveru.
  • lokacija- odeljak lokacije može se nalaziti samo unutar sekcije servera i sadrži postavke samo za određeni zahtjev.
  • mail- sadrži postavke proxyja e-pošte.

Prije nego što pređemo na opcije, moramo reći još nekoliko riječi o sintaksi linije u konfiguracijskoj datoteci. izgleda ovako:

vrijednost parametra dodatna_vrijednost...;

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

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

  • korisnik- korisnik u čije ime će se program pokrenuti.
  • worker_processes- postavlja koliko procesa treba pokrenuti da bi se paralelizirao rad programa; ne trebate pokrenuti više procesa nego što imate jezgri. Možete postaviti parametar auto a zatim će program sam odrediti ovaj broj.
  • pid= program pid fajl.
  • worker_rlimit_nofile- označava maksimalan broj datoteka koje program može otvoriti. Izračunato kao worker_processes * worker_connections* 2.

Završili smo sa globalnim opcijama; nije ih bilo mnogo i nisu bile toliko interesantne. Mnogo interesantnije u smislu optimizacije su opcije iz sekcije događaja:

  • worker_connections- broj konekcija koje program može obraditi istovremeno na jednom procesu. Ako pomnožimo worker_process sa ovim parametrom, dobićemo maksimalan broj korisnika koji se mogu povezati na server u isto vrijeme. Preporučuje se postavljanje vrijednosti od 1024 do 4048.
  • multi_accept- dozvoliti prihvatanje više konekcija u isto vrijeme, uključiti ili isključiti parametar.
  • koristiti- način rada sa mrežnim stekom. Zadana postavka je anketa, ali na Linuxu je efikasnije koristiti epoll.
  • sendfile- koristite metod 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- vremensko ograničenje čekanja prije nego što se veza za održavanje aktivnosti zatvori, zadana vrijednost je 65, ali se može smanjiti na 10 sekundi.
  • keepalive_requests- maksimalan broj aktivnih veza sa jednog klijenta, preporučeno 100.
  • reset_timeout_connection- prekid veze nakon isteka vremena. Vrijednost je uključena.
  • open_file_cache- keširajte informacije o otvorenim datotekama. Linija za podešavanje izgleda ovako: open_file_cache max=200000 inactive=20s; max - maksimalan broj datoteka u kešu, vrijeme keširanja.
  • open_file_cache_valid- označava nakon kojeg vremena informacije treba izbrisati iz keša. Na primjer: open_file_cache_valid 30s;
  • open_file_cache_min_uses- keširajte informacije o datotekama koje su otvorene najmanje određeni broj puta.
  • open_file_cache_errors- keširajte informacije o nedostajućim datotekama, vrijednost uključena.

Pregledani su glavni parametri. Ove postavke će vam pomoći da dobijete bolje performanse od nginxa. Pogledat ćemo odjeljke servera i lokacije u postavljanju virtualnih hostova.

Postavljanje Gzip kompresije

Kompresija sadržaja je neophodna da bi se smanjila veličina podataka koje preuzima pretraživač. Ovo ubrzava učitavanje stranice, ali dodaje dodatno opterećenje serverskom procesoru. Da biste omogućili kompresiju u odjeljku http, morate dodati sljedeći parametar:

Ova direktiva se takođe može koristiti u odeljku servera, tada će raditi samo za navedenu virtuelnu domenu. Zatim konfiguriramo parametre kompresije koristeći sljedeće opcije:

  • gzip_min_length- minimalna dužina stranice u bajtovima na kojoj se mora koristiti kompresija, na primjer, 1000 (1 kb)
  • gzip_proxied- da li je potrebno komprimirati proksi zahtjeve, bilo koji kaže da sve treba komprimirati.
  • gzip_types- vrste datoteka koje treba komprimirati, na primjer: text/plain application/xml application/x-javascript text/javascript text/css text/json;
  • gzip_disable "msie6"- kompresija nije podržana u IE 6, pa smo je onemogućili.
  • gzip_comp_level- nivo kompresije, dostupne opcije od 1 do 10. 1 - minimalna, 10 - maksimalna kompresija.

Postavljanje virtuelnih hostova

Kao što znate, server može ugostiti više web lokacija. Svi zahtjevi dolaze na IP servera, a nginx već određuje, na osnovu domene, koji sadržaj treba da se servira. Da bi nginx znao šta pripada kojoj domeni treba da bude konfigurisan virtuelni domaćini. Svaki host se obično nalazi u zasebnom fajlu. Konfiguracija hosta se nalazi u odeljku servera, ali pošto su svi fajlovi sa omogućenih lokacija uvezeni u http sekciju, logika strukture konfiguracione datoteke nije prekinuta.

Pogledajmo primjer podešavanja:

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

  • slušaj 80- specificira da se veza treba slušati na portu 80, može također sadržavati opciju default-server, što znači da će se ovaj domen otvoriti ako domen nije naveden u zahtjevu.
  • root /var/www/html- direktorij u kojem se nalaze datoteke stranice.
  • index index.html- stranica koja će se otvoriti po defaultu.
  • server_name - Ime domena site.
  • access_log- datoteka za snimanje dnevnika zahtjeva na server, može se koristiti i globalno u http sekciji i za određenu vrstu datoteke na lokaciji.
  • error_log- dnevnik grešaka web servera, može prihvatiti dodatni parametar koji ukazuje na detalje dnevnika. warn - maksimum, crit - samo kritične greške.

Ovo su sve osnovne postavke za virtuelni host, nakon čega će on već raditi. Ali postoji i odeljak za lokaciju, koji vam omogućava da konfigurišete ponašanje servera za određene direktorijume i datoteke. Sintaksa lokacije je:

adresa lokacije()

Kao adresa mogu se koristiti i direktni upit u vezi s korijenskim serverom i regularni izrazi. Da biste koristili regularne izraze, prethodi mu znak "~". Pogledajmo primjere u nastavku, ali za sada pogledajmo moguće direktive:

  • dopustiti- dozvoli pristup lokaciji korisnicima, svima - svima, također možete odrediti ip ili podmrežu.
  • poricati- zabrani pristup lokaciji, sve - za sve.
  • try-files- 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 da otvori $uri, zatim index.html, ako $uri.html nije pronađen, a zatim, ako ne postoji nijedan od predloških fajlova, daje grešku 404.
  • ističe- postavlja vreme keširanja pretraživača za dati element, na primer, 1d - jedan dan, 2h - dva sata, 30s - 30 sekundi.

Osim ovih glavnih direktiva, ovdje se mogu koristiti i druge. Za više detalja pogledajte zvaničnu dokumentaciju. Pogledajmo nekoliko primjera:

Ne zapisujte favicon:

lokacija = /favicon.ico (
log_not_found off;
access_log off;
}

Zabrani pristup fajlovima koji počinju sa tačkom:

lokacija ~ /\. (
poricati sve;
}

Keširajte redovne fajlove 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)$ (
access_log off; log_not_found off; ističe 90d;

Nginx je popularan i moćan web server i obrnuti proxy.

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

Bilješka: Ovaj vodič je urađen na Ubuntu 12.04.

Hijerarhija Nginx direktorija

Nginx pohranjuje konfiguracijske datoteke u /etc/nginx direktorij.

Ovaj direktorij sadrži još nekoliko direktorija i modularnih konfiguracijskih datoteka.

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/

Korisnici Apache-a su već upoznati sa direktorijumima koji su dostupni i omogućeni za web lokacije. Ovi direktoriji definiraju konfiguracije stranice. Fajlovi se obično kreiraju i pohranjuju na dostupnim lokacijama; sites-enabled pohranjuje samo konfiguracije omogućenih lokacija. Da biste to učinili, trebate kreirati simboličku vezu od web-lokacija koje su dostupne do web-lokacija koje su omogućene.

Direktorij conf.d se također može koristiti za pohranjivanje konfiguracija. Svaki fajl sa ekstenzijom .conf će biti pročitan kada se Nginx pokrene. Sintaksa takvih datoteka ne bi trebala sadržavati greš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 fajl

Datoteka nginx.conf čita odgovarajuće konfiguracijske datoteke i kombinuje ih u jednu konfiguracijsku datoteku kada se server pokrene.

Otvorite fajl:

sudo nano /etc/nginx/nginx.conf

korisnik www-podaci;
worker_processes 4;
pid /var/run/nginx.pid;
događaji (
worker_connections 768;
#multi_accept on;
}
http(
. . .

Prvi redovi daju opšte informacije o Nginxu. Linija korisnika www-podaci specificira korisnika s kojim se pokreće server.

Direktiva pid specificira gdje treba pohraniti Procesni PID-ovi Za unutrašnja upotreba. Worker_processes linija određuje broj procesa koje Nginx može podržati istovremeno.

Također možete specificirati dnevnike u ovom dijelu datoteke (na primjer, dnevnik grešaka je definiran korištenjem error_log direktive).

Nakon općih informacija o serveru je odjeljak događaja. On upravlja rukovanjem Nginx vezama. Nakon njega slijedi http blok. Prije nego što nastavimo s konfiguracijama web servera, moramo razumjeti kako je formatirana Nginx konfiguracijska datoteka.

Struktura Nginx konfiguracijske datoteke

Nginx konfiguracijski fajl podijeljen je na blokove.

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

Detalji konfiguracije http bloka su slojeviti pomoću zatvorenih blokova koji nasljeđuju svojstva bloka u kojem se nalaze. http blok pohranjuje većinu općih Nginx konfiguracija, koje su podijeljene na blokove servera, koji su zauzvrat podijeljeni na blokove lokacije.

Kada konfigurišete Nginx, važno je zapamtiti sledeće pravilo: što je viši nivo konfiguracije, to više blokova nasleđuje ovu konfiguraciju; što je niži nivo konfiguracije, to je „individualniji“. To jest, ako se X parametar mora koristiti u svakom bloku servera, onda se takav parametar mora staviti u http blok.

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, morate postaviti sljedeće parametre:

gzip on;
gzip_disable "msie6";

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

Ako bi neki parametar trebao imati drugačije značenje u nekoliko blokova servera, onda se takav parametar može podesiti vrhunski nivo a zatim ga nadjačati unutar samih blokova servera. Kao rezultat toga, Nginx će izvršiti parametar najnižeg nivoa.

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

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

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

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

Ovo omogućava modularnu konfiguracijsku arhitekturu u kojoj se mogu kreirati novi fajlovi koji služe novim stranicama. Takođe vam omogućava grupisanje sličnih fajlova.

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

Nginx virtuelni blokovi

Blokovi servera u Nginxu su analogni Apache virtuelnim hostovima (ali se radi praktičnosti nazivaju i virtuelni hostovi). U suštini, serverski blokovi jesu specifikacije odvojene web stranice koje se nalaze na istom serveru.

U direktoriju sites-available možete pronaći zadanu datoteku bloka servera koja dolazi sa serverom. Ovaj fajl sadrži sve potrebne podatke za održavanje stranice.

cd stranice-dostupne
sudo nano default

root /usr/share/nginx/www;
index index.html index.htm;
server_name localhost;
lokacija/(

}
lokacija /doc/ (

alias /usr/share/doc/;
autoindex on;
dozvoli 127.0.0.1;
poricati sve;

Zadani fajl je vrlo dobro komentiran, ali u primjeru iznad komentari su izostavljeni radi jednostavnosti i pogodnosti.

Blok servera uključuje sve postavke postavljene između vitičastih zagrada:

server (
. . .
}

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

Root direktiva specificira direktorij u kojem će biti pohranjen sadržaj stranice. Nginx će u ovom direktoriju tražiti datoteke koje korisnik zatraži. Podrazumevano je ovo /usr/share/nginx/www.

Napomena: svi redovi završavaju tačkom i zarezom. Ovako Nginx odvaja jednu direktivu od druge. Ako ne postoji tačka-zarez, Nginx će pročitati dvije direktive (ili više direktiva) kao jednu direktivu s dodatnim argumentima.

Direktiva indeksa specificira datoteke koje će se koristiti kao indeks. Web server će provjeriti datoteke onim redoslijedom kojim su navedeni. Ako nije zatražena nijedna stranica, blok servera ć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 listu imena domena koje će opsluživati ​​ovaj blok servera. Broj domena je neograničen; Domene na listi treba odvojiti razmacima.

Zvjezdica (*) na početku ili kraju domene specificira ime sa maskom, gdje se zvjezdica podudara s dijelom (ili nekoliko dijelova) imena. Na primjer, ime *.example.com bi odgovaralo 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 tačno podudara.

Ako adresa ne pronađe podudaranje, tražit će najviše dugo ime sa maskom koja se završava zvjezdicom. Ako ne pronađe takvo ime, vratit će prvo podudaranje regularnog izraza.

Imena servera koji koriste regularne izraze počinju sa tildom (~). nažalost, ovu temu je izvan okvira ovog članka.

Lokacijski blokovi

Lokacija / linija označava da će se direktive u zagradama primijeniti na sve tražene resurse koji se ne podudaraju ni sa jednim drugim blokom lokacije.

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

Tilda omogućava način rada koji razlikuje velika i mala slova, dok tilda sa zvjezdicom omogućava način rada bez obzira na velika i mala slova.

Ako zahtjev u potpunosti odgovara bloku lokacije, server zaustavlja pretragu i koristi takav blok. Ako server ne pronađe potpuno podudarni blok lokacije, uspoređuje URI s parametrima lokacijskih direktiva. 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 pretragu regularnog izraza kako bi pokušao upariti jedan od dostupnih obrazaca. Ako nađe takav izraz, on ga koristi. Ako takav izraz ne postoji, server koristi prethodno pronađeno podudaranje URI-ja.

Kao završnu napomenu, Nginx preferira tačna podudaranja. Ako nema takvih podudaranja, traži regularni izraz, a zatim pretražuje URI. Da biste promijenili prioritet pretraživanja URI-ja, koristite kombinaciju znakova ^~.

try_files direktiva

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

Ovo vam omogućava da koristite dodatni parametri odrediti kako će Nginx posluživati ​​zahtjeve.

Zadana konfiguracijska datoteka ima red:

try_files $uri $uri/ /index.html;

To znači da kada se primi zahtjev koji opslužuje lokacijski blok, Nginx će prvo pokušati poslužiti uri kao datoteku (ovo ponašanje je specificirano promjenljivom $uri).

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

Koristeći zadnju kosu crtu, server 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 serverskog bloka). Svaka try_files direktiva koristi posljednji parametar kao rezervni, tako da datoteka mora postojati na sistemu.

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

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

try_files $uri $uri/ =404;

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

Dodatne opcije

Alias ​​direktiva omogućava Nginx-u da poslužuje stranice bloka lokacija izvan datog direktorija (na primjer, izvan root-a).

Na primjer, fajlovi zatraženi iz /doc/ bit će dostavljeni sa /usr/share/doc/.

Direktiva autoindex on omogućava vam da omogućite popis Nginx direktorija za datu direktivu lokacije.

Linije dozvole i zabrani kontroliraju pristup direktorijima.

Zaključak

Nginx web server je bogat funkcijama i vrlo moćan, ali njegova terminologija i opcije mogu biti zbunjujuće.

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

Tagovi: ,

Najbolji članci na ovu temu