Nginx: konfiguracija in namestitev. Uradni vodnik za začetnike po NGinx Nastavitev konfiguracije nginx na gostovanju

Namenski spletni strežnik, ki temelji na Nginxu, je odličen način za izboljšanje delovanja spletnih mest. V hitrosti obdelave statične vsebine mu preprosto ni enakega: zlahka prenese več tisoč hkratnih povezav in ga je mogoče enostavno optimizirati in prilagoditi kateri koli konfiguraciji. Vendar? Nginx, ki deluje kot sprednji del za Apache, se izkaže za najbolj ranljivo točko celotne spletne infrastrukture, zato je treba posebno pozornost nameniti varnosti nginx.

Ta članek je neke vrste izobraževalni program ali, če želite, povzetek vseh tehnik za izboljšanje varnosti nginx. Ne bo vsebovalo teorije, opisa osnov postavitve spletnega strežnika in ostalega napuha. Namesto tega boste prejeli izčrpno, praktično gradivo, ki opisuje vse osnovne korake, ki jih morate narediti, da boste imeli resnično varen spletni strežnik.

Namestitev

Paket nginx je na voljo v vnaprej prevedeni obliki za vsako distribucijo. Če pa strežnik zgradite sami, ga lahko naredite bolj kompaktnega in zanesljivega, prav tako pa boste imeli možnost spremeniti pozdravno vrstico spletnega strežnika, da odvračate nespametne scenarijske otroke.

Spremenite pozdravno vrstico spletnega strežnika

Prenesite vire nginx, odprite datoteko src/http/ngx_http_header_filter_module.c in poiščite naslednji dve vrstici:

statični char ngx_http_server_string = "Strežnik: nginx" CRLF;
statični char ngx_http_server_full_string = "Strežnik: " NGINX_VER CRLF;

Zamenjajte jih z nečim takim:

statični char ngx_http_server_string = "Strežnik: ][ spletni strežnik" CRLF;
statični char ngx_http_server_full_string = "Strežnik: ][ spletni strežnik" CRLF;

Odstranite vse module nginx, ki jih ne uporabljate

Nekateri moduli nginx se med prevajanjem neposredno povežejo s spletnim strežnikom in vsak od njih je poln potencialne nevarnosti. Morda bo v prihodnosti v enem od njih najdena ranljivost in vaš strežnik bo ogrožen. Z onemogočanjem nepotrebnih modulov lahko bistveno zmanjšate tveganje za nastanek te situacije.

Zgradite z naslednjimi ukazi:

# ./configure --without-http_autoindex_module --without-http_ssi_module
# naredi
# naredi namestitev

Na ta način boste dobili nginx z vnaprej onemogočenimi (in v večini primerov neuporabnimi) moduli SSI (Server Side Includes) in Autoindex. Če želite izvedeti, katere module je mogoče varno odstraniti s spletnega strežnika, zaženite konfiguracijski skript z zastavico '-help'.

Razčlenimo nginx.conf

Po namestitvi je treba nginx konfigurirati. Na straneh revije je že bilo gradivo, ki opisuje ta proces, vendar se bomo držali teme članka in govorili o načinih za povečanje varnosti strežnika.

Onemogoči prikaz različice strežnika na vseh straneh z napakami

V datoteko nginx.conf dodajte vrstico »server_tokens off«. To bo prisililo nginx, da skrije informacije o vrsti in različici spletnega strežnika na straneh, ustvarjenih kot odgovor na napačno zahtevo odjemalca.

Nastavite zaščito pred motnjami sklada

V razdelek strežnika dodajte naslednje vrstice:

# vi /etc/nginx/nginx.conf

# Največja velikost medpomnilnika za shranjevanje telesa zahteve odjemalca
telo_odjemalca_velikost_medpomnilnika 1K;
# Največja velikost medpomnilnika za shranjevanje glav zahtev odjemalca
odjemalec_header_buffer_size 1k;
# Največja velikost telesa zahteve odjemalca, podana v polju glave Content-Length. Če mora strežnik podpirati nalaganje datotek, je treba to vrednost povečati
client_max_body_size 1k;
# Število in velikost medpomnilnikov za branje velike glave zahteve odjemalca
large_client_header_buffers 2 1k;

Bodite pozorni na direktivo large_client_header_buffers. Nginx privzeto dodeli štiri medpomnilnike za shranjevanje niza URI, velikost vsakega od njih je enaka velikosti pomnilniške strani (za x86 je to 4 KB). Medpomnilniki se sprostijo vsakič, ko povezava preide v stanje vzdrževanja po obdelavi zahteve. Dva medpomnilnika velikosti 1 KB lahko shranita URI-je, ki so dolgi samo 2 KB, kar pomaga pri boju proti robotom in napadom DoS.

Če želite izboljšati zmogljivost, dodajte naslednje vrstice:

# vi /etc/nginx/nginx.conf

# Časovna omejitev med branjem telesa zahteve odjemalca
odjemalec_body_timeout 10;
# Časovna omejitev med branjem glave zahteve odjemalca
client_header_timeout 10;
# Časovna omejitev, po kateri vzdrževalna povezava z odjemalcem ne bo zaprta s strani strežnika
keepalive_timeout 5 5;
# Časovna omejitev pri pošiljanju odgovora stranki
časovna omejitev pošiljanja 10;

Nadzirajte število hkratnih povezav

Za zaščito spletnega strežnika pred preobremenitvijo in poskusi izvedbe napada DoS dodajte naslednje vrstice v konfiguracijo:

# vi /etc/nginx/nginx.conf

# Opišemo območje (meje), v katerem bodo shranjena stanja seje. 1 MB cona lahko shrani približno 32000 stanj, nastavimo njeno velikost na 5 MB
limit_zone omeji $binary_remote_addr 5m;
# Nastavite največje število sočasnih povezav za eno sejo. V bistvu ta številka določa največje število povezav z enega IP-ja
limit_conn meje 5;

Prva direktiva naj bo v razdelku HTTP, druga v razdelku lokacije. Ko število povezav preseže omejitve, odjemalec prejme sporočilo »Storitev ni na voljo« s kodo 503.

Dovolite povezave samo z vašo domeno

Hekerji lahko uporabljajo robote za skeniranje podomrežij in iskanje ranljivih spletnih strežnikov. Običajno roboti preprosto prečkajo območja naslovov IP in iščejo odprtih 80 vrat ter pošljejo zahtevo HEAD, da pridobijo informacije o spletnem strežniku (ali domači strani). Takšen pregled lahko preprosto preprečite tako, da prepoveste dostop do strežnika po naslovu IP (dodajte v pododdelek lokacije):

# vi /etc/nginx/nginx.conf

if ($host !~ ^(host.com|www.host.com)$) (
vrnitev 444;
}

Omejite število razpoložljivih metod za dostop do spletnega strežnika

Nekateri roboti uporabljajo različne metode za vzpostavitev stika s strežnikom, da bi poskusili zaznati vrsto in/ali infiltracijo, vendar RFC 2616 jasno navaja, da spletni strežnik ni dolžan implementirati vseh in nepodprte metode morda preprosto ne bodo obdelane. Danes so v uporabi samo še metode GET (zahteva za dokument), HEAD (zahteva za glavo strežnika) in POST (zahteva za objavo dokumenta), tako da lahko vse ostale brez bolečin onemogočite tako, da v razdelek strežnika konfiguracijske datoteke vstavite naslednje vrstice:

# vi /etc/nginx/nginx.conf

if ($request_method !~ ^(GET|HEAD|POST)$) (
vrnitev 444;
}

Zapri bote

Drug način za blokiranje botov, skenerjev in drugih zlih duhov temelji na določitvi vrste odjemalca (uporabniški agent). Ni preveč učinkovito, ker večina botov cilja na povsem legitimne brskalnike, vendar v nekaterih primerih ostaja uporabno:

# vi /etc/nginx/nginx.conf

# Blokiraj upravitelje prenosov
if ($http_user_agent ~* LWP::Simple|BBBike|wget) (
vrnitev 403;
}
# Blokirajte nekatere vrste botov
if ($http_user_agent ~* msnbot|scrapbot) (
vrnitev 403;
}

Blokirajte neželeno pošto napotiteljev

Če vaše spletno mesto objavlja spletne dnevnike v javno dostopni obliki, lahko zlahka postanete žrtev neželene pošte Referrer (ko roboti neželene pošte vzpostavijo stik z vašim strežnikom in v glavi navedejo napotitelja - naslov oglaševane strani). Ta vrsta neželene pošte lahko zlahka uniči ocene SEO spletne strani, zato jo je treba nujno blokirati. Eden od načinov za to je črna lista najpogostejših besed, ki jih najdemo v naslovih oglaševanih spletnih mest.

# vi /etc/nginx/nginx.conf

# razdelek strežnika
če ($http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen))
{
vrnitev 403;
}

Blokiraj vročo povezavo

Vroča povezava je vključitev slike (ali druge vsebine) z drugega mesta na stran. V bistvu gre za krajo, saj sliko, za katero ste porabili več kot eno uro svojega prostega časa, drugi ne samo prosto uporabljajo, ampak tudi obremenijo vaš spletni strežnik, ne da bi nanj pripeljali obiskovalce. Za boj proti vročim povezavam je dovolj, da zagotovite, da so slike poslane odjemalcu le, če jih je zahteval, ko je že na spletnem mestu (z drugimi besedami, glava zahteve napotitelja mora vsebovati ime vašega spletnega mesta). V razdelek strežnika konfiguracijske datoteke nginx.conf dodajte naslednje vrstice (host.com je naslov vašega spletnega mesta):

# vi /etc/nginx/nginx.conf

lokacija /slike/ (
valid_referers none blocked www.host.com host.com;
če ($invalid_referer) (
vrnitev 403;
}
}

Kot alternativo lahko konfigurirate strežnik tako, da namesto zahtevane slike vrne posebno pasico s sporočilom o kraji. Če želite to narediti, zamenjajte vrstico "return 403" z vrstico:

prepiši ^/images/uploads.*\.(gif|jpg|jpeg|png)$ http://www.host.com/banned.jpg zadnji

Zaščitite pomembne imenike pred tujci

Kot kateri koli drug spletni strežnik vam nginx omogoča reguliranje dostopa do imenikov na podlagi naslovov IP in gesel. To funkcijo lahko uporabite za zapiranje določenih delov spletnega mesta pred radovednimi očmi. Na primer, če želite URI odrezati od zunanjega sveta:

# vi /etc/nginx/nginx.conf

lokacija /nalaganja/ (
# Dovolite dostop samo napravam v lokalnem omrežju
dovoli 192.168.1.0/24;
# Ubijmo vse ostale
zanikati vse;
}

Zdaj bodo imeli samo uporabniki lokalnega omrežja dostop do dokumentov v imeniku za nalaganje. Če želite nastaviti geslo, boste morali opraviti bolj zapletene korake. Najprej morate ustvariti datoteko z geslom, ki je zasebna za nginx, in ji dodati potrebne uporabnike (kot primer dodajmo skrbniškega uporabnika):

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

# vi /etc/nginx/nginx.conf

lokacija /admin/ (
auth_basic "Omejeno";
auth_basic_user_file /etc/nginx/.htpasswd/passwd;
}

Nove uporabnike lahko dodate z naslednjim ukazom:

# htpasswd -s /etc/nginx/.htpasswd/passwd uporabnik

Uporabite SSL

Če vaše spletno mesto deluje z zasebnimi uporabniškimi podatki, kot so številke kreditnih kartic, gesla drugih storitev, ali omogoča dostop do drugih pomembnih informacij, ki bi lahko postale slasten zalogaj za tretje osebe, poskrbite za šifriranje. Nginx dobro deluje s SSL in te funkcije ne smete zanemariti.

Če želite nastaviti šifriranje SSL z nginxom, sledite nekaj preprostim korakom. Najprej morate ustvariti potrdilo z naslednjim zaporedjem ukazov:

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

Nato opišite potrdilo v konfiguracijski datoteki nginx:

# vi /etc/nginx/nginx.conf

strežnik(
ime_strežnika host.com;
poslušaj 443;
ssl vklopljen;
ssl_certifikat /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
dostop_log /etc/nginx/logs/ssl.access.log;
error_log /etc/nginx/logs/ssl.error.log;
}

Po tem lahko znova zaženete spletni strežnik:

# /etc/init.d/nginx znova naloži

Seveda je brez podpore samega spletnega mesta to nesmiselno početi.

druge metode

Nastavite pravilne vrednosti za sistemske spremenljivke

Odprite datoteko /etc/sysctl.conf in vanjo vstavite naslednje vrstice:

# vi /etc/sysctl.conf

# Zaščita pred napadi smrkcev
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Zaščita pred neveljavnimi sporočili ICMP
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Zaščita pred SYN poplavo
net.ipv4.tcp_syncookies = 1
# Onemogoči izvorno usmerjanje
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Zaščita proti ponarejanju
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Nismo usmerjevalnik
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Omogoči ExecShield
kernel.exec-shield = 1
kernel.randomize_va_space = 1
# Razširitev obsega razpoložljivih vrat
net.ipv4.ip_local_port_range = 2000 65000
# Povečajte največjo velikost medpomnilnikov TCP
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1

Postavite korenski imenik spletnega strežnika na namensko particijo

S postavitvijo korenskega imenika spletnega strežnika na namensko particijo in onemogočanjem namestitve kakršnih koli izvršljivih datotek ali datotek naprave boste zaščitili preostanek sistema pred vsemi, ki imajo dostop do korena spletnega strežnika. V tem primeru bi moral biti vnos v datoteki /etc/fstab videti nekako takole:

/dev/sda5 /nginx ext4 privzete vrednosti,nosuid,noexec,nodev 1 2

Postavite nginx v okolje chroot/jail

Vsak sodoben sistem *nix omogoča zaklepanje aplikacije v izoliranem izvajalnem okolju. V Linuxu lahko za to uporabite tehnologije KVM, Xen, OpenVZ in VServer, v FreeBSD - Jail, v Solarisu - Zones. Če nobena od teh tehnologij ni na voljo, lahko nginx postavite v klasični chroot, ki lahko, čeprav je veliko bolj krhek, ustavi večino hekerjev.

Namestite pravila SELinux za zaščito nginx

Dobra alternativa izoliranim izvajalskim okoljem so lokalni sistemi za zaznavanje in preprečevanje vdorov, kot sta SELinux ali AppArmor. Če so pravilno konfigurirani, lahko preprečijo poskuse vdora v spletni strežnik. Privzeto nobeden od njih ni konfiguriran za delo v povezavi z nginxom, vendar v okviru projekta SELinuxNginx(http://sf.net/projects/selinuxnginx/) so bila ustvarjena pravila za SELinux, ki jih lahko uporablja vsak. Vse kar ostane je prenos in namestitev:

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

Nastavitev požarnega zidu

Običajno je nginx nameščen na namenskih računalnikih, ki so pripravljeni na visoko obremenitev, zato je pogosto edina omrežna storitev, ki se izvaja na strežniku. Za zaščito strežnika je dovolj, da ustvarite zelo majhen nabor pravil, ki bodo odprla vrata 80, 110 in 143 (če bi seveda nginx moral delovati tudi kot proxy IMAP/POP3) in zaprla vse ostalo iz zunanjega sveta. .

Omejite število povezav s požarnim zidom

Za malo obremenjeno spletno stran je dobro omejiti število poskusov povezave z enega naslova IP na minuto. To vas lahko zaščiti pred nekaterimi vrstami napadov DoS in grobe sile. V Linuxu je to mogoče storiti s standardnim modulom stanja iptables/netfilter:

# iptables -A INPUT -p tcp --dport 80 -i eth0 \
-m stanje --stanje NOVO -m nedavno --set
# iptables -A INPUT -p tcp --dport 80 -i eth0 \
-m stanje --stanje NOVO -m nedavno --posodobitev \
--sekund 60 --hitcount 15 -j DROP

Pravila zmanjšujejo omejitev števila povezav z enega IP-ja na minuto na 15. Enako lahko storite z uporabo pf:

# vi /etc/pf.conf

webserver_ip="1.1.1.1"
tabela vztrajati
hitro blokiraj od
posredujte $ext_if proto tcp v $webserver_ip \
vrata www zastavice S/SA ohrani stanje \
(max-src-conn 100, max-src-conn-rate 15/60,\
preobremenitev izpiranje)

Poleg omejitve števila zaporednih povezav (15 na minuto) to pravilo postavlja dodatno omejitev števila sočasnih povezav, ki je enaka 100.

Nastavitev PHP

Če uporabljate nginx v povezavi s PHP, ga ne pozabite konfigurirati. Tako bi morala izgledati konfiguracijska datoteka /etc/php/php.ini varnega strežnika:

# vi /etc/php/php.ini

# Onemogočite nevarne funkcije
disable_functions = phpinfo, system, mail, exec
# Najdaljši čas izvajanja skripta
max_execution_time = 30
# Največji čas, ki ga skript lahko porabi za obdelavo podatkov zahteve
max_input_time = 60
# Največja količina pomnilnika, dodeljenega posameznemu skriptu
omejitev_pomnilnika = 8M
# Največja velikost podatkov, poslanih v skript z metodo POST
post_max_size = 8M
# Največja velikost naloženih datotek
upload_max_filesize = 2M
# Uporabnikom ne pokaži napak skripta PHP
display_errors = Izklopljeno
# Omogoči varni način
safe_mode = Vklopljeno
# Omogoči varni način SQL
sql.safe_mode = Vklopljeno
# Dovoli, da se zunanji ukazi izvajajo samo v tem imeniku
safe_mode_exec_dir = /path/to/protected/directory
# Zaščitite pred uhajanjem informacij o PHP
expose_php = Izklopljeno
# Vodimo dnevnike
log_errors = Vklopljeno
# Preprečite odpiranje oddaljenih datotek
allow_url_fopen = Izklopljeno

zaključki

Z uporabo priporočil, opisanih v tem članku, boste dobili veliko bolj varen spletni strežnik. Vendar ne pozabite, da vse tehnike ne bodo ustrezale vaši konfiguraciji. Na primer, zaščita s surovo silo, ki temelji na zmanjšanju velikosti medpomnilnikov, ki jih nginx dodeli za obdelavo zahtev odjemalcev, lahko privede do zmanjšanja zmogljivosti in v nekaterih primerih do napak pri obdelavi zahtev. Omejitev števila povezav bo resno vplivala na delovanje celo srednje obremenjenega spletnega mesta, vendar bo koristila, če ima stran malo prometa. Vedno preverite, kako spremembe, ki jih naredite, vplivajo na delovanje in splošno zdravje spletne strani.

O junaku dneva

Nginx je eden najmočnejših in najbolj priljubljenih spletnih strežnikov na svetu. Po podatkih Netcrafta se uporablja za podporo več kot 12 milijonov spletnih strani po vsem svetu, vključno z mastodonti, kot so Rambler, Yandex, Begun, WordPress.com, Wrike, vkontakte.ru, megashara.com, Librusec in Taba.ru. Kompetentna arhitektura, ki temelji na multipleksiranju povezav z uporabo sistemskih klicev select, epoll (Linux), kqueue (FreeBSD), in mehanizma za upravljanje pomnilnika, ki temelji na bazenih (majhnih medpomnilnikih od 1 do 16 KB), omogoča, da nginx ne upade niti pri zelo visokih obremenitvah, vzdrži več kot 10.000 hkratnih povezav (t.i. problem C10K). Prvotno ga je napisal Igor Sysoev za Rambler in bil odprt leta 2004 pod licenco, podobno BSD.

V stiku z

Ta priročnik daje osnovni uvod v nginx in opisuje nekaj preprostih nalog, ki jih je mogoče opraviti z njim. Predpostavlja se, da je nginx že nameščen na bralčevem računalniku. Če ne, glejte Namestitev nginx. Ta priročnik opisuje, kako zagnati in zaustaviti nginx ter znova naložiti njegovo konfiguracijo, pojasnjuje, kako je strukturirana konfiguracijska datoteka, in opisuje, kako konfigurirati nginx za streženje statične vsebine, kako konfigurirati strežnik proxy na nginxu in kako povezati nginx s FastCGI aplikacija.

Nginx ima enega glavnega in več delovnih procesov. Glavna naloga glavnega procesa je branje in preverjanje konfiguracije ter upravljanje delovnih procesov. Delovni procesi izvajajo dejansko obdelavo zahtevkov. nginx uporablja model, ki temelji na dogodkih, in mehanizme, specifične za operacijski sistem, za učinkovito porazdelitev zahtev med delovnimi procesi. Število delovnih procesov je nastavljeno v konfiguracijski datoteki in ga je mogoče določiti za dano konfiguracijo ali samodejno nastaviti enako številu razpoložljivih procesorskih jeder (glejte worker_processes).

Kako delujejo nginx in njegovi moduli, je definirano v konfiguracijski datoteki. Privzeto se konfiguracijska datoteka imenuje nginx.conf in se nahaja v imeniku /usr/local/nginx/conf, /etc/nginx ali /usr/local/etc/nginx.

Zaženi, zaustavi, ponovno naloži konfiguracijo

Če želite zagnati nginx, morate izvesti izvedljivo datoteko. Ko se nginx izvaja, ga je mogoče nadzorovati s klicem izvršljive datoteke z možnostjo -s. Uporabite naslednjo sintakso:

nginx -s signal

Kje signal je lahko eno od naslednjega:

  • stop - hiter zaključek
  • quit - gladka prekinitev
  • ponovno odpiranje - ponovno odpiranje dnevniških datotek

Na primer, če želite ustaviti procese nginx, medtem ko čakate, da delovni procesi končajo servisiranje trenutnih zahtev, lahko zaženete naslednji ukaz:

Ukaz mora biti izveden pod istim uporabnikom, pod katerim je bil zagnan nginx.

Spremembe konfiguracijske datoteke ne bodo uveljavljene, dokler ukaz za ponovno nalaganje konfiguracije ni ročno poslan nginxu ali pa se znova zažene. Če želite znova naložiti konfiguracijo, zaženite:

Po prejemu signala glavni proces preveri pravilno sintakso nove konfiguracijske datoteke in poskuša uporabiti konfiguracijo, ki jo vsebuje. Če uspe, glavni proces zažene nove delovne procese in pošlje sporočila starim delovnim procesom, v katerih jih prosi, naj se prekinejo. V nasprotnem primeru glavni proces povrne spremembe in nadaljuje delo s staro konfiguracijo. Stari delovni procesi, ko dobijo ukaz za prekinitev, prenehajo sprejemati nove zahteve in nadaljujejo s streženjem trenutnih zahtev, dokler niso servisirane vse take zahteve. Po tem se stari delovni procesi prekinejo.

Procesom nginx lahko pošiljate signale tudi z orodji Unix, kot je pripomoček za ubijanje. V tem primeru se signal pošlje neposredno procesu z danim ID-jem. ID glavnega procesa nginx je privzeto zapisan v datoteko nginx.pid v imeniku /usr/local/nginx/logs ali /var/run. Na primer, če je ID glavnega procesa 1628, bi za pošiljanje signala QUIT, ki bo povzročil eleganten izhod nginx, zagnali:

Za ogled seznama vseh tekočih procesov nginx lahko uporabite pripomoček ps, na primer, kot sledi:

Več informacij o pošiljanju signalov procesom nginx najdete v razdelku Upravljanje nginx.

Struktura konfiguracijske datoteke

nginx je sestavljen iz modulov, ki so konfigurirani z direktivami, podanimi v konfiguracijski datoteki. Direktive delimo na enostavne in blokovne. Preprosta direktiva je sestavljena iz imena in parametrov, ločenih s presledki, in se konča s podpičjem (;). Direktiva o bloku je sestavljena na enak način kot preprosta direktiva, le da ji namesto podpičja za imenom in parametri sledi niz dodatnih navodil v zavitih oklepajih (( in )). Če ima direktiva bloka lahko druge direktive, nastavljene znotraj zavitih oklepajev, se imenuje kontekst (primeri: dogodki, http , strežnik in lokacijo).

Za direktive, postavljene v konfiguracijsko datoteko zunaj katerega koli konteksta, velja, da so v glavnem kontekstu. Dogodki in http direktive se nahajajo v glavnem kontekstu, strežnik v http, lokacija pa v strežniku.

Kot komentar se šteje del vrstice za simbolom #.

Storitev statične vsebine

Ena od pomembnih nalog konfiguracije nginx je strežba datotek, kot so slike ali statične strani HTML. Oglejmo si primer, v katerem bodo glede na zahtevo datoteke razdeljene iz različnih lokalnih imenikov: /data/www, ki vsebuje datoteke HTML, in /data/images, ki vsebuje slikovne datoteke. Če želite to narediti, boste morali urediti konfiguracijsko datoteko in konfigurirati blok strežnik znotraj bloka http z dvema blokoma lokacijo.

Najprej ustvarite imenik /data/www in vanj vstavite datoteko index.html s poljubno besedilno vsebino, ustvarite tudi imenik /data/images in vanj vstavite nekaj slikovnih datotek.

Nato odprite konfiguracijsko datoteko. Privzeta konfiguracijska datoteka že vključuje več primerov bloka strežnika, ki so večinoma komentirani. Za našo trenutno nalogo je bolje, da komentirate vse takšne bloke in dodate nov blok strežnika:

Na splošno lahko konfiguracijska datoteka vsebuje več strežniških blokov, razločljiv po pristaniščih, kjer jih poslušanje, in avtor ime strežnika. Ko ugotovi, kateri strežnik bo obdelal zahtevo, nginx primerja URI, naveden v glavi zahteve, s parametri lokacijskih direktiv, definiranih znotraj bloka strežnika.

V blok strežnika dodajte blok lokacije, kot je ta:

lokacija / ( koren /podatki/www; )

Ta lokacijski blok določa “ / ” kot predpono, ki se primerja z URI iz zahteve. Za ujemajoče se zahteve dodajte URI poti, podani v direktivi korenina, to je v tem primeru do /data/www , se pridobi pot do zahtevane datoteke v lokalnem datotečnem sistemu. Če obstaja ujemanje z več lokacijskimi bloki, nginx izbere blok z najdaljšo predpono. Zgornji blok lokacije vsebuje najkrajšo predpono, dolžino ena, zato bo ta blok uporabljen le, če se ne ujema z nobenim drugim blokom lokacije.

lokacija /slike/ ( koren /podatki; )

Ujemal bo poizvedbe, ki se začnejo z /images/ (zanje je primerna tudi lokacija /, vendar je tam podana predpona krajša).

Končna konfiguracija bloka strežnika bi morala izgledati takole:

strežnik (lokacija / ( koren /podatki/www; ) lokacija /slike/ ( koren /podatki; ) )

To je delujoča konfiguracija strežnika, ki posluša standardna vrata 80 in je dostopna v lokalnem računalniku na http://localhost/. Kot odgovor na zahteve, katerih URI se začnejo z /images/, bo strežnik poslal datoteke iz imenika /data/images. Na primer, na zahtevo http://localhost/images/example.png bo nginx odgovoril z datoteko /data/images/example.png. Če ta datoteka ne obstaja, bo nginx poslal odgovor z napako 404. Zahteve, katerih URI se ne začnejo z /images/, bodo preslikane v imenik /data/www. Na primer, zahteva za http://localhost/some/example.html bo povzročila, da bo v odgovor poslana datoteka /data/www/some/example.html.

Če želite uporabiti novo konfiguracijo, zaženite nginx, če se še ne izvaja, ali pošljite signal za ponovno nalaganje glavnemu procesu nginx tako, da zaženete:

Če nekaj ne deluje po pričakovanjih, lahko poskusite ugotoviti razlog z uporabo datotek access.log in error.log iz imenika /usr/local/nginx/logs ali /var/log/nginx.

Nastavitev preprostega proxy strežnika

Ena od pogostih uporab nginxa je uporaba kot proxy strežnik, to je strežnik, ki sprejema zahteve, jih preusmerja na posredniške strežnike, od njih sprejema odgovore in jih pošilja odjemalcu.

Postavili bomo osnovni proxy strežnik, ki bo stregel slikovnim zahtevam iz lokalnega imenika in pošiljal vse druge zahteve na proxy strežnik. V tem primeru bosta oba strežnika delovala znotraj iste instance nginx.

Najprej ustvarite strežnik proxy tako, da konfiguracijski datoteki nginx dodate še en blok strežnika z naslednjo vsebino:

strežnik ( poslušaj 8080; root /data/up1; lokacija / ( ) )

To bo preprost strežnik, ki posluša na vratih 8080 (prej direktiva poslušanja ni bila navedena, ker so bila uporabljena standardna vrata 80) in preslikava vseh zahtev v imenik /data/up1 v lokalnem datotečnem sistemu. Ustvarite ta imenik in vanj postavite datoteko index.html. Upoštevajte, da je korenska direktiva postavljena v kontekst strežnika. Ta korenska direktiva bo uporabljena, ko lokacijska direktiva, izbrana za izvedbo zahteve, ne vsebuje lastne korenske direktive.

Nato uporabite konfiguracijo strežnika iz prejšnjega razdelka in jo spremenite tako, da postane konfiguracija strežnika proxy. V prvi lokacijski blok dodajte direktivo proxy_pass, ki kot parameter navaja protokol, ime in vrata posredniškega strežnika (v našem primeru je to http://localhost:8080):

strežnik ( lokacija / ( proxy_pass http://localhost:8080; ) lokacija / slike / ( koren / podatki; ) )

Spremenili bomo drugi lokacijski blok, ki trenutno preslikava zahteve s predpono /images/ v datoteke v imeniku /data/images, da bo ustrezal zahtevam za slike s tipičnimi končnicami datotek. Spremenjen blok lokacije izgleda takole:

lokacija ~ \.(gif|jpg|png)$ ( root /data/images; )

Parameter je regularni izraz, ki se ujema z vsemi URI-ji, ki se končajo na .gif, .jpg ali .png. Pred regularnim izrazom mora biti znak ~. Ustrezne zahteve bodo preslikane v imenik /data/images.

Ko nginx izbere lokacijski blok, ki bo služil zahtevi, najprej preveri direktive lokacijo, določanje predpon, zapomnitev lokacije z najdaljšo ujemajočo se predpono in nato preverjanje regularnih izrazov. Če obstaja ujemanje z regularnim izrazom, nginx izbere ustrezno lokacijo, sicer se zavzame prej shranjena lokacija.

Končna konfiguracija strežnika proxy je videti takole:

strežnik ( lokacija / ( proxy_pass http://localhost:8080/; ) lokacija ~ \.(gif|jpg|png)$ ( koren /data/images; ) )

Ta strežnik bo filtriral zahteve, ki se končajo z .gif, .jpg ali .png, in jih preslikal v imenik /data/images (z dodajanjem URI-ja parametru korenske direktive) in posredoval vse druge zahteve strežniku proxy, ki je konfiguriran zgoraj.

Če želite uporabiti novo konfiguracijo, pošljite signal za ponovno nalaganje v nginx, kot je opisano v prejšnjih razdelkih.

obstaja kup druge direktive za nadaljnjo konfiguracijo proxy povezave.

Nastavitev proxyja FastCGI

nginx se lahko uporablja za preusmerjanje zahtev na strežnike FastCGI. Lahko izvajajo aplikacije, ustvarjene z uporabo različnih ogrodij in programskih jezikov, kot je PHP.

Osnovna konfiguracija nginx za delo s proksi strežnikom FastCGI vključuje uporabo direktive fastcgi_pass namesto direktive proxy_pass in direktive fastcgi_param za konfiguracijo parametrov, posredovanih strežniku FastCGI. Predstavljajte si, da je strežnik FastCGI na voljo na localhost:9000. Z uporabo konfiguracije proxyja iz prejšnjega razdelka kot osnove zamenjajte direktivo proxy_pass z direktivo fastcgi_pass in spremenite parameter na localhost:9000. V PHP se parameter SCRIPT_FILENAME uporablja za definiranje imena skripta, parameter QUERY_STRING pa posreduje poizvedbene parametre. Dobili boste naslednjo konfiguracijo:

strežnik ( lokacija / ( fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; ) lokacija ~ \.(gif|jpg|png)$ ( root /data/images; ) )

To bo konfiguriralo strežnik, ki bo preusmeril vse zahteve, razen zahtev za statične slike, na posredniški strežnik, ki se izvaja na localhost:9000 z uporabo protokola FastCGI.

N ginx, izgovorjen kot "motor x", je brezplačen, visoko zmogljiv strežnik HTTP in povratni posredniški strežnik, odgovoren za nalaganje nekaterih največjih spletnih mest v internetu. Lahko se uporablja kot samostojen spletni strežnik in kot povratni proxy za Apache in druge spletne strežnike.

Če ste razvijalec ali sistemski skrbnik, obstaja velika verjetnost, da imate Nginx opravka redno.

V tem članku si bomo ogledali najpomembnejše in najpogosteje uporabljene ukaze Nginx, vključno z zagonom, zaustavitvijo in ponovnim zagonom Nginxa.

Preden začnete

Vse ukaze je treba izvajati kot root ali root in bi morali delovati v kateri koli sodobni distribuciji Linuxa, kot sta CentOS 7 in Debian 9.

Zaženite Nginx

Zagon Nginxa je precej preprost. Samo zaženite naslednji ukaz:

Sudo systemctl zažene nginx

Če je ukaz uspešen, ne daje nobenih rezultatov.

Če za zagon Nginx uporabljate distribucijo Linux brez systemd:

Storitev Sudo zažene nginx

Namesto ročnega zagona storitve Nginx je priporočljivo, da jo konfigurirate tako, da se zažene ob zagonu sistema:

Sudo systemctl omogoči nginx

Nehaj Nging

Stop Nginx bo hitro zaustavil vse delovne procese Nginx, tudi če obstajajo odprte povezave.

Če želite ustaviti Nginx, zaženite enega od naslednjih ukazov:

Sudo systemctl stop nginx sudo service stop nginx

Znova zaženite Nginx

Možnost ponovnega zagona je hiter način za zaustavitev in zagon strežnika Nginx.

Za ponovni zagon Nginxa uporabite enega od naslednjih ukazov:

Sudo systemctl znova zaženite nginx sudo storitev znova zaženite nginx

To je ukaz, ki ga boste verjetno najpogosteje uporabljali.

Znova zaženite Nginx

Nginx morate znova zagnati vsakič, ko spremenite njegovo konfiguracijo.

Možnost ponovnega zagona bo naložila novo konfiguracijo, zagnala nove delovne procese z novo konfiguracijo in elegantno zaustavila stare delovne procese.

Če želite znova zagnati Nginx, uporabite enega od naslednjih ukazov:

Sudo systemctl ponovno naloži nginx sudo storitev ponovno naloži nginx

Testiranje konfiguracije Nginx

Kadar koli spremenite konfiguracijsko datoteko strežnika Nginx, je priporočljivo, da preverite konfiguracijo, preden znova zaženete ali ponovno naložite storitev.

Z naslednjim ukazom preverite, ali je v vaši konfiguraciji Nginx sintaksa ali sistemske napake:

Sudo nginx -t

Izhod bo videti nekako takole.

Nginx: sintaksa konfiguracijske datoteke /etc/nginx/nginx.conf je v redu nginx: test konfiguracijske datoteke /etc/nginx/nginx.conf je uspešen

Če pride do napak, bo ukaz natisnil podrobno sporočilo.

Oglejte si stanje Nginx

Če želite preveriti stanje storitve Nginx, uporabite naslednji ukaz:

Sudo systemctl status nginx

Izhod bo videti nekako takole:

* nginx.service - nginx - visoko zmogljiv spletni strežnik Naloženo: naloženo (/lib/systemd/system/nginx.service; omogočeno; prednastavitev prodajalca: omogočeno) Drop-In: /etc/systemd/system/nginx.service.d ` -nofile.conf Aktiven: aktiven (teče) od ponedeljka 22. aprila 2019 10:21:22 MSK; Pred 10 urami Dokumenti: http://nginx.org/en/docs/ Proces: 1113 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Glavni PID : 1183 (nginx) Naloge: 4 Pomnilnik: 63,1M CPE: 3min 31,529s CGroup: /system.slice/nginx.service |-1183 nginx: glavni proces /usr/sbin/nginx -c /etc/nginx/nginx.con |-1184 nginx: delovni proces |-1185 nginx: delovni proces `-1186 nginx: delovni procesi

Preverite različico Nginx

Včasih boste morda morali poznati svojo različico Nginx, da boste lahko odpravili napako ali ugotovili, ali je določena funkcija na voljo.

Različico Nginx lahko preverite tako, da zaženete:

Sudo nginx -v različica nginx: nginx/1.14.0 (Ubuntu)

Možnost -V bo prikazala različico Nginx skupaj z možnostjo konfiguracije.

Sudo nginx -V

Zaključek

V tem članku smo vam pokazali nekaj najpomembnejših ukazov Nginx. Če želite izvedeti več o ukazni vrstici Nginx, obiščite dokumentacijo Nginx

Delali bomo pod običajnim uporabniškim računom s pravicami sudo. Potrebovali boste tudi nameščen spletni strežnik Nginx. Po želji lahko namestite celoten LEMP (Linux, Nginx, MySQL in PHP). Če želite namestiti Nginx, zaženite naslednji ukaz:

Sudo apt-get posodobite sudo apt-get namestite nginx

Preden nadaljujete z branjem članka, toplo priporočamo, da izpolnite zgoraj opisane pogoje. Na našem strežniku bomo na primer konfigurirali dve domeni. Njihova imena so example.com, test.com. Če nimate na voljo dveh imen, si omislite dve in kasneje vam bomo pokazali, kako nastavite lokalni strežnik, da preizkusite njuno delovanje.

1. korak - Nastavitev novega korenskega imenika

Privzeto je na vašem strežniku Nginx aktiviran samo en virtualni gostitelj. Deluje z dokumenti na: /usr/share/nginx/html. To nastavitev bomo spremenili, ker najpogosteje delamo z imenikom /var/www. Nginx privzeto ne uporablja tega imenika, saj je v nasprotju z Debianovo politiko uporabe paketov v imeniku /var/www.

Ker pa smo preprosti uporabniki in le redko naletimo na težave s shranjevanjem paketov, bomo to politiko prezrli in ta imenik nastavili kot korenski imenik. Natančneje, vsak imenik v korenskem imeniku mora ustrezati ločenemu mestu. In vse datoteke spletnega mesta bomo postavili v imenik /var/www/site_name/html. Najprej ustvarimo vse potrebne podimenike. Če želite to narediti, zaženite naslednji ukaz:

Sudo mkdir -p /var/www/example.com/html sudo mkdir -p /var/www/test.com/html

Zastavica -p lupini pove, naj ustvari nove imenike, če ne obstajajo na podani poti. Zdaj pa prenesimo pravice do tega imenika na navadnega uporabnika. Uporabimo spremenljivko okolja $USER, da nam ne bo treba vnesti imena našega računa. Po teh korakih bomo lahko ustvarili datoteke v imeniku /var/www/, obiskovalci spletnega mesta pa ne.

Sudo chown -R $USER:$USER /var/www/example.com/html sudo chown -R $USER:$USER /var/www/test.com/html

Pravice do korenskega imenika morajo biti pravilno konfigurirane, če niste popravili vrednosti umask, a za vsak slučaj jo bomo popravili:

Sudo chmod -R 755 /var/www

Popolnoma smo pripravili strukturo za naš strežnik, lahko gremo naprej.

2. korak – Ustvarite predlogo strani za vsako spletno mesto

Ustvarimo stran, ki bo privzeto prikazana ob ustvarjanju novega mesta. Ustvarite datoteko index.html v prvem imeniku domene:

Nano /var/www/example.com/html/index.html

V notranjosti bomo naredili minimalno vsebino, da bomo lahko razumeli, na katerem mestu smo. Tukaj je nekaj vzorčne vsebine:

Dobrodošli na Example.com!

To je virtualni gostitelj example.com!

Shranite in zaprite datoteko. Ker bo imela druga datoteka podobno vsebino, jo preprosto kopirajmo:

Cp /var/www/example.com/html/index.html /var/www/test.com/html/

Naredimo nekaj majhnih sprememb:

Nano /var/www/test.com/html/index.html Dobrodošli na Test.com!

To je virtualni gostitelj test.com!

Shranite in zaprite to datoteko. Zdaj bomo videli, ali so naša spletna mesta pravilno konfigurirana.

3. korak – Ustvarite datoteke navideznega gostitelja za vsako domeno

Zdaj imamo vsebino za vsako spletno stran, čas je za ustvarjanje virtualni gostitelji(natančneje, v Nginxu se imenujejo strežniški bloki, mi pa bomo uporabljali izraz virtualni gostitelj). Nginx privzeto uporablja enega virtualnega gostitelja, imenovanega privzeto. Uporabljamo ga kot predlogo za našo konfiguracijo. Najprej bomo obdelali nastavitve za prvo domeno, ki jih bomo nato preprosto kopirali in minimalno spremenili za drugo domeno.

Ustvarjanje vaše prve datoteke virtualnega gostitelja

Kot sem že rekel, kopirajmo konfiguracijsko datoteko privzeto:

Sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com

Odprimo to datoteko s skrbniškimi pravicami:

Sudo nano /etc/nginx/sites-available/example.com

Če izpustite komentarje, bi morala datoteka izgledati takole:

Strežnik ( poslušaj 80 default_server; poslušaj [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.html index.htm; ime_strežnika lokalni gostitelj; lokacija / ( try_files $uri $uri/ =404 ;))

Najprej si poglejmo direktivo poslušanja. Samo en blok strežnika lahko nastavimo na default_server. Blok s to vrednostjo bo služil zahtevam, če ni bil najden ustrezen blok (blok je vse, kar je v strežniku). To direktivo bomo onemogočili v privzetem navideznem gostitelju za uporabo default_server na eni od naših domen. To funkcijo bom pustil omogočeno za prvo domeno, vendar jo lahko premaknete v drugo, če želite.

Naslednja stvar, ki jo bomo naredili, je nastavitev korenskega imenika z uporabo korenske direktive. Kazati mora na imenik, kjer se nahajajo vsi dokumenti na vašem spletnem mestu:

Koren /var/www/example.com/html;

Opomba: Vsako navodilo Nginx se mora končati z ";".

Server_name example.com www.example.com;

Strežnik ( poslušaj 80 default_server; poslušaj [::]:80 default_server ipv6only=on; root /var/www/example.com/html; index index.html index.htm; server_name example.com www.example.com; location / ( try_files $uri $uri/ =404; ) )

S tem je osnovna nastavitev zaključena. Shranite in zaprite datoteko.

Ustvarjanje drugega virtualnega gostitelja

Če želite to narediti, preprosto kopirajte datoteko z nastavitvami za prvo spletno mesto:

Sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/test.com

Odprite to datoteko s skrbniškimi pravicami

Sudo nano /etc/nginx/sites-available/test.com

V tej datoteki bomo prav tako začeli z direktivo poslušanja. Če ste v prvi datoteki pustili možnost default_server, jo morate tukaj odstraniti. Prav tako je treba odstraniti možnost ipv6only=on, ker je določena samo za eno kombinacijo naslov/vrata:

Poslušaj 80; poslušaj [::]:80;

Nastavite korenski imenik za drugo spletno mesto:

Koren /var/www/test.com/html;

Zdaj pa določimo server_name za drugo domeno:

Server_name test.com www.test.com;

Končna nastavitev bi morala izgledati takole:

Strežnik ( poslušaj 80; poslušaj [::]:80; koren /var/www/test.com/html; indeks index.html index.htm; ime_strežnika test.com www.test.com; lokacija / ( try_files $uri $ uri/ =404;

Shranite in zaprite datoteko.

4. korak - Aktivirajte virtualne gostitelje in znova zaženite Nginx

Naše virtualne gostitelje smo konfigurirali, zdaj je čas, da jih aktiviramo. Če želite to narediti, morate ustvariti simbolične povezave do teh datotek in jih postaviti v imenik s spletnimi mesti, ki ga Nginx prebere ob zagonu. Povezave lahko ustvarite z naslednjim ukazom:

Sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/

Nginx bo zdaj obdelal te datoteke. Omogočen pa je tudi privzeti virtualni gostitelj, zato bomo dobili konflikt parametra default_server. To nastavitev lahko onemogočite tako, da preprosto odstranite povezavo do datoteke. Datoteka sama bo ostala v imeniku sites-available, tako da jo lahko po potrebi vedno vrnemo na njeno mesto.

Sudo rm /etc/nginx/sites-enabled/default

Obstaja še ena nastavitev, ki jo je treba izvesti v konfiguracijski datoteki Nginx. Odpri:

Sudo nano /etc/nginx/nginx.conf

Odkomentirati morate eno od vrstic:

Server_names_hash_bucket_size: 64;

Ta direktiva se uporablja, ko je podano veliko število imen strežnikov ali če so podana nenavadno dolga imena. Na primer, če je privzeta vrednost 32 in je ime strežnika nastavljeno na "too.long.server.name.example.org", se bo nginx zavrnil zagon in prikazal sporočilo o napaki:

Ni bilo mogoče zgraditi server_names_hash, morali bi povečati server_names_hash_bucket_size: 32

Zato je bolje, da povečate to vrednost na 64. Zdaj lahko znova zaženete spletni strežnik, da bodo spremembe začele veljati:

Ponovni zagon storitve Sudo nginx

Vaš strežnik bi moral zdaj obdelati zahteve za obe domeni.

5. korak – nastavitev datoteke lokalnih gostiteljev (neobvezno)

Če ste uporabili lastna imena domen, potem morate konfigurirati vaš lokalni strežnik, tako da jih prepozna in da lahko preverite svoje virtualne gostitelje (vaša imena domen bomo registrirali v datoteki lokalnih gostiteljev). Seveda uporabniki interneta ne bodo mogli videti vaše strani na ta način, vendar bo to dovolj za preverjanje gostiteljev. Na ta način prestrežemo zahtevo, ki bi morala biti poslana DNS strežniku. V teoriji navedemo, na kateri naslov IP naj gre naš računalnik, ko dostopa do določenega imena domene.

Upoštevajte, da je treba te spremembe opraviti samo na lokalnem računalniku in ne na strežniku VPS. Potrebovali boste korenske pravice in imeti morate tudi pravico do spreminjanja sistemskih datotek.

Če uporabljate sistem Mac ali Linux, lahko popravke izvedete na naslednji način:

Sudo nano /etc/hosts

Če uporabljate Windows, boste navodila za ta OS našli na uradni spletni strani proizvajalca (ali na Googlu). Poznati morate javni naslov IP vašega strežnika in imena domen, ki jih želite povezati z njim. Recimo, da je moj naslov 111.111.111.111, potem moram v datoteko hosts dodati naslednje vrstice:

127.0.0.1 localhost 127.0.0.1 guest-desktop 111.111.111.111 example.com 111.111.111.111 test.com

Na ta način bomo prestregli vse zahteve za ta imena domen in jih preusmerili na naš strežnik. Shranite in zaprite datoteko, ko končate.

6. korak – Preverite

Na tej točki bi morali imeti popolnoma delujočo nastavitev. Vse, kar ostane, je preveriti. Če želite to narediti, pojdite na naslov brskalnika: http://example.com (:target="_blank"). Če sta obe strani prikazani pravilno, lahko čestitate za popolno nastavitev strežnika Nginx. Če ste na tej stopnji spremenili datoteko hosts, jih je treba izbrisati, ker preverjanje je bilo uspešno in jih ne potrebujemo več. Če želite uporabnikom interneta omogočiti dostop do spletnih mest, boste morali kupiti imena domen.

Zaključek

Naučili ste se, kako v celoti konfigurirati virtualne gostitelje za vsako spletno mesto na vašem strežniku. Pravzaprav ni nobenih omejitev glede števila mest na enem računalniku, razen glede virov samega sistema.

|

Nginx je brezplačen in odprt spletni strežnik, ki se uporablja za storitve spletnih mest in aplikacij katere koli kompleksnosti. Nginx je znan po svojem majhnem pomnilniškem odtisu, visoki razširljivosti in modularni, na dogodke vodeni arhitekturi, ki lahko zagotovi zanesljivo in predvidljivo delovanje. Nginx ne deluje le kot spletni strežnik, ampak tudi kot izravnalnik obremenitve, strežnik za predpomnjenje HTTP in povratni proxy.

Seveda si bo sprva morda težko zapomniti vse ukaze in priporočila za upravljanje strežnika Nginx. Ta priročnik je namenjen tistim, ki delajo z Nginxom. Zajema nekaj osnovnih ukazov za upravljanje storitev ter nasvete za diagnosticiranje in reševanje nekaterih pogostih težav.

Vsak razdelek je mogoče uporabiti neodvisno od drugih, tako da lahko preskočite razdelke, ki jih ne potrebujete. Vse pogojne vrednosti v ukazih so označene rdeče; Namesto teh vrednosti lahko nadomestite svoje podatke.

Opomba Opomba: To predvideva, da uporabljate različico Nginxa, nameščeno iz privzetega repozitorija v distribuciji, podobni Debianu. Nekateri ukazi in direktive, opisani v tem priročniku, niso na voljo v drugih distribucijah ali različicah Nginxa, nameščenih iz drugih virov.

Namestitev Nginx

Posodobite svoj indeks paketov in nato namestite Nginx:

sudo apt-get posodobitev
sudo apt-get namestite nginx

Preverjanje stanja Nginx

Če želite preveriti stanje spletnega strežnika na trenutnem računalniku, vnesite:

sudo systemctl status nginx

Samodejno nalaganje Nginx

Privzeto se storitev Nginx zažene samodejno. Če želite spremeniti to vedenje, vnesite:

sudo systemctl onemogoči nginx

Če želite znova dodati Nginx v zagon, vnesite:

sudo systemctl omogoči nginx

Upravljanje storitve Nginx

Če želite zaustaviti strežnik Nginx, vnesite naslednji ukaz:

sudo systemctl zaustavi nginx

Za zagon strežnika Nginx vnesite:

sudo systemctl zaženite nginx

Če želite ustaviti storitev in jo znova zagnati, vnesite:

sudo systemctl znova zaženite nginx

Če ste spremenili konfiguracijo, lahko znova zaženete Nginx v trenutni seji. Vnesite naslednji ukaz:

sudo systemctl znova naloži nginx

Ustvarjanje korenskega imenika za statično vsebino

Pri ustvarjanju spletnih mest na Nginxu razvijalci pogosto uporabljajo navidezne gostitelje (ali strežniške bloke) – to so gostitelji, ki služijo posameznim spletnim mestom ali domenam. Če želite to narediti, morate ustvariti koren dokumenta, imenik najvišje ravni, ki ga Nginx preverja pri streženju vsebine.

Ukazi v spodnjem bloku bodo ustvarili nov korenski imenik, mu dali dovoljenja uporabniku sudo in spremenili dovoljenja vsakega podimenika v podimenik pod /var/www/.


sudo chown -R $USER:$USER /var/www/example.com/html
najdi /var/www -type d -exec chmod 775 () \;

V tem primeru korenski imenik ponuja globalne pravice za branje in izvajanje. Če želite izbrati druga dovoljenja, zamenjajte 775 in podajte zahtevana dovoljenja.

Ne pozabite, da se morajo pravice dostopa spreminjati glede na situacijo.

Ustvarjanje korenskega imenika za dinamične datoteke

Če vaše spletno mesto uporablja dinamične module, kot je PHP-FPM, boste morda morali prenesti pravice za nekatere datoteke v skupino www-data. Če skupina potrebuje pisalni dostop do imenika, skupini dodelite lastništvo imenika.

Naslednji ukazi ustvarijo nov koren dokumenta, ga posredujejo skupini podatkov www in spremenijo dovoljenja za vsak podimenik v /var/www.

sudo mkdir -p /var/www/example.com/html
sudo chown -R www-data:www-data /var/www/example.com
sudo find /var/www -type d -exec chmod 775 () \;

Omogočanje in onemogočanje konfiguracijskih datotek

Če želite omogočiti navideznega gostitelja, morate ustvariti simbolno povezavo iz imenika s spletnimi mesti v imenik s spletnimi mesti, ki ga Nginx prebere med zagonom.

Če želite to narediti, vnesite ukaz:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Po tem morate znova zagnati Nginx, da se nastavitve posodobijo.

Odpravljanje težav z razpršilno tabelo

Nginx uporablja zgoščene tabele za hitro obdelavo statičnih podatkov (imena strežnikov, vrste MIME). Če ste dodali več imen strežnikov, obstaja možnost, da podana velikost zgoščene vrednosti imen strežnika ne bo zadostovala in boste ob spreminjanju videli napako server_names_hash_bucket_size. To je mogoče rešiti z urejanjem ene vrednosti v datoteki /etc/nginx/nginx.conf.

Odpri to datoteko:

sudo nano /etc/nginx/nginx.conf

V datoteki poiščite direktivo server_names_hash_bucket_size. Odstranite simbol #, da odkomentirate vrstico in povečate vrednost direktive:

http(
. . .
server_names_hash_bucket_size 64 ;
. . .
}

To bo povečalo velikost zgoščenih tabel imen strežnika Nginx in omogočilo storitvi, da obdela vsa imena strežnikov, ki ste jih dodali. Shranite in zaprite datoteko, nato pa znova zaženite Nginx, da posodobite nastavitve.

Testiranje konfiguracije

Vsakič, ko spremenite konfiguracijske datoteke Nginx, ne pozabite zagnati naslednjega ukaza, da preverite sintaksne napake:

Če so v konfiguraciji napake, bo izhod ukaza natančno pokazal, kje so bile najdene. Če v konfiguracijskih datotekah ni napak v sintaksi, boste videli nekaj takega:

nginx: sintaksa konfiguracijske datoteke /etc/nginx/nginx.conf je v redu
nginx: test konfiguracijske datoteke /etc/nginx/nginx.conf je uspešen

Če ni napak, lahko znova zaženete storitev:

sudo systemctl znova zaženite nginx

Pomembne datoteke in imeniki Nginx

Vsebina

V imenik /var/www/html je shranjena vsa vsebina spletnega mesta (to je korenski imenik spletnega mesta). Spremenite lahko privzete nastavitve Nginx in določite druge imenike v var/www.

Konfiguracija strežnika

  • /etc/nginx/: konfiguracijski imenik Nginx (tu so shranjene vse konfiguracijske datoteke spletnega strežnika).
  • /etc/nginx/nginx.conf: Glavna konfiguracijska datoteka spletnega strežnika, ki vsebuje vse globalne nastavitve.
  • /etc/nginx/sites-available/default: Privzeti virtualni gostitelj Nginx. Drugi navidezni gostitelji morajo biti prav tako shranjeni v imeniku, ki je na voljo za spletna mesta (vendar ne bodo delovali brez simbolne povezave v sistemih, ki so omogočeni za spletna mesta).
  • /etc/nginx/sites-enabled/: Omogočene datoteke navideznega gostitelja so shranjene tukaj. Ob zagonu ali ponovnem zagonu Nginx prebere konfiguracijske datoteke in povezave v tem imeniku, da ustvari popolno konfiguracijo.

Dnevniki

  • /var/log/nginx/access.log: To je dnevnik, ki beleži vse zahteve Nginx (razen če konfiguracija spletnega strežnika ne določa drugače).
  • /var/log/nginx/error.log: To je dnevnik napak.

Za dostop do sistemskih dnevnikov procesa Nginx zaženite ta ukaz:

sudo journalctl -u nginx

Zaključek

V tem priročniku so navedeni splošni postopki za vzdrževanje strežnika Nginx. Če želite izvedeti več o delu z Nginxom, si oglejte naslednje vadnice.

Oznake:

 

Morda bi bilo koristno prebrati: