Za 5 minuta lako i temeljno shvatite Nginx
Zdravo svima, ovde Erge. Ovih dana gradim sajt Tehnopai, pa je neizbežno da koristim Nginx, pa sam odlučio da napravim jedan uvodni tutorijal o Nginx-u, nadajući se da će pomoći i vama.
Kao programeri, svi verovatno znate koliko je Nginx važan. Nginx je visoko-performantni HTTP i obrnuti-proksi (reverse proxy) web server koji je razvio Igor Sysoev iz Rusije, a prva verzija je objavljena 4. oktobra 2004. godine.

Karakteristike Nginx-a su:
- Malo zauzeće memorije
- Jaka sposobnost obrade istovremenih veza (može da podrži oko 50000 istovremenih konekcija)
- Veoma jednostavna konfiguracija
- Veoma malo bagova
- Izuzetno jednostavna instalacija
- Veoma stabilan servis (može proći meseci bez potrebe za restartom)
Zahvaljujući ovim karakteristikama, sve više sajtova počinje da koristi Nginx. Zato je savlađivanje Nginx-a postalo veština koju programer mora posedovati.
Jedan: Uloga Nginx-a
Obrnuti proksi je jedna od najčešće korišćenih funkcija Nginx-a kao web servera. Šta je obrnuti proksi? Mnogo početnika, kada prvi put naiđu na ovaj pojam, neminovno dobije gomilu upitnika.

Da bismo razumeli šta je obrnuti proksi, prvo moramo razumeti šta je proksi (forward proxy).
Na primer, Xiao Er pretraživač ne može direktno da pristupi Guge-u, ali proksi server u Hongkongu može da pristupi Guge-u, pa je Xiao Er pristupio proksi serveru u Hongkongu i na taj način neizrno pristupio Guge-u. Taj proksi server je forward proxy (proksi).

Ukratko, forward proxy zastupa klijenta, omogućavajući vam da normalno pristupite ciljnom serveru.
Suprotno tome, obrnuti proksi zastupa server, omogućavajući da veliki broj zahteva ravnomerno pristupa određenom serveru.
Na primer, 100000 Xiao Er-a istovremeno pristupa itwanger.com. Ako postoji samo jedan server, lako bi se srušio, pa u uslovima visokog opterećenja postoji mnogo servera (recimo 10) koji preuzimaju taj posao. Kako onda omogućiti da 100000 Xiao Er-a pristupi tim 10 servera?
Za to je potreban obrnuti-proksi server. Obrnuti-proksi server usmerava 10000 Xiao Er-a na server A, 10000 na server B, a 1 na server C — na taj način se pritisak na svaki server srazmerno smanjuje. Zar nije odlično?

Ali evo pitanja. Svaki server može imati različite karakteristike. Na primer, server A ima više memorije, oko 100 GB; server B ima manje memorije, oko 10 GB; server C ima još manje memorije, samo 1 GB. Kako omogućiti da svaki server preuzme onoliko opterećenja koliko može da podnese?
Nginx ima ugrađen round-robin i weighted round-robin kako bi postigao balansiranje opterećenja. Pošto je server A moćniji, povećava mu se težina (weight) tako da 50000 Xiao Er-a pristupa njemu; server B je nešto slabiji, pa mu je težina manja, pa mu 20000 pristupa; server C je najslabiji, pa ima najmanju težinu i njemu pristupa 10000.
Pored toga, Nginx ima još jednu moćnu funkciju — razdvajanje statike i dinamike.
U softverskom razvoju, neki zahtevi zahtevaju obradu na pozadini; dok neki zahtevi ne zahtevaju obradu na pozadini, na primer zahtevi za fajlove poput css i js. Fajlovi koji ne zahtevaju obradu na pozadini se nazivaju statički fajlovi.
Možemo na osnovu određenih pravila razdvojiti dinamičke i statičke resurse, a zatim preko Nginx-a razdvojiti zahteve, tako da zahtevi za statičke resurse ne moraju da prolaze kroz web server, čime se poboljšava ukupna brzina odgovora resursa.

Dva: Instalacija Nginx-a
Instalacija Nginx-a se razlikuje u zavisnosti od operativnog sistema.
Windows
Na Windowsu možete direktno preuzeti zip green instalacioni paket sa zvaničnog sajta, koji se nakon raspakivanja odmah može koristiti.
macOS
Na macOS-u se Nginx može instalirati preko Homebrew-a. Ako ranije niste instalirali Homebrew, možete pogledati ovaj link. Što se tiče terminala, preporučujem korišćenje wrap — ima AI sugestije i veoma je zgodan.
Komanda za instalaciju je sledeća:
brew install nginxProces grubo glasi ovako: pitate wrap „kako da instaliram Nginx?”, a on će vam dati kompletne korake za instalaciju i pokretanje, i pokazaće vam gde se nalazi Nginx konfiguracioni fajl.

Ako port nije 80, možete ga promeniti u konfiguracionom fajlu — na primer, ja sam ga promenio u 8088.
Nakon uspešne instalacije, možete pristupiti preko http://localhost:8088.

Linux
Na Linuxu postoji više načina instalacije, i svaki provajder servera ima svoju dokumentaciju. Na primer, na Tencent Cloud možete pretražiti ključnu reč „Nginx” i pronaći je.

Ovde ću koristiti macOS okruženje kao primer za demonstraciju.
Prvi korak, proverite da li je Nginx instaliran komandom brew info nginx.

Drugi korak, instalirajte Nginx komandom brew install nginx.

Iz navedenih informacija se može zaključiti:
- Root direktorijum je
/usr/local/var/www - Konfiguracioni fajl je
/usr/local/etc/nginx/nginx.conf - Podrazumevani port je 8080
Treći korak, pokrenite Nginx komandom nginx.

Četvrti korak, u adresnoj traci pretraživača pristupite preko localhost:8080 i videćete sledeću stranicu dobrodošlice.

Tri: Najčešće Nginx komande
U principu, kada se Nginx jednom pokrene, retko ga isključujemo — najviše koristimo komandu reload. Kada izmenimo konfiguracioni fajl, potrebno je jednom izvršiti komandu reload kako bi Nginx prihvatio izmene.
nginx pokretanje
nginx -s stop zaustavljanje
nginx -s quit bezbedno zatvaranje
nginx -s reload ponovno učitavanje konfiguracionog fajla
nginx -t provera ispravnosti konfiguracionog fajla
ps aux|grep nginx pregled Nginx procesaPosebno želim da istaknem komandu nginx -t — ona proverava da li je konfiguracioni fajl ispravan. Ako jeste, ispisaće sledeće podatke.
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successfulAko ste zaboravili gde se nalazi konfiguracioni fajl, ova komanda je izuzetno korisna.
Pored toga, Nginx-ov reload je nevidljiv za korisnika, što smatram prilično moćnim — restartovali ste Nginx, a korisnik to uopšte ne oseća i nastavlja da pristupa sajtu. To je upravo prednost Nginx-a.
Četiri: Konfiguracija Nginx-a
Hajde prvo da pogledamo dijagram strukture Nginx konfiguracije:
main # globalna konfiguracija
├── events # konfiguracija mrežnih veza
├── http # konfiguracija proksija, keša, logova itd.
│ ├── upstream # konfiguracija balansiranja opterećenja
│ ├── server # konfiguracija virtuelnog hosta, može postojati više server blokova
│ ├── server
│ │ ├── location # za matchovanje URI-ja (URL je jedna vrsta URI-ja), može postojati više location blokova
│ │ ├── location
│ │ └── ...
│ └── ...
└── ...Sada da izvucemo podrazumevanu Nginx konfiguraciju i pogledamo je. Dodao sam komentare, tako da ćete lako shvatiti čemu služi svaki red konfiguracije.
worker_processes 1; # broj Nginx procesa, obično se postavlja na broj CPU jezgara
events {
worker_connections 1024; # maksimalan broj istovremenih veza po procesu
}
http {
include mime.types; # mapa ekstenzija fajlova prema MIME tipovima
default_type application/octet-stream;
sendfile on; # uključuje efikasan režim prenosa
keepalive_timeout 65; # vreme održavanja veze, poznato i kao timeout, u sekundama
server {
listen 8080; # port koji se sluša
server_name localhost; # konfigurisano ime domena
location / {
root html; # root direktorijum sajta
index index.html index.htm; # podrazumevani početni fajl
}
error_page 500 502 503 504 /50x.html; # stranica koja se prikazuje za 50x greške
location = /50x.html {
root html;
}
}
include servers/*; # učitavanje pod-konfiguracionih fajlova
}Nastavljamo sa primerom iz Linux produkcionog okruženja.
Pošto je port 80 na mom serveru podrazumevano otvoren, konfigurisao sam port za slušanje na 80. Ako konfigurišete neki drugi port, ne zaboravite da otvorite taj port u bezbednosnoj grupi vašeg cloud servisa.
Za root sam naveo direktorijum /home/www, a početni fajl je index.html. Ovaj fajl sam prilagodio, pogledajmo sadržaj.
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Chenmo Wang Er</title>
<body>
<img src="niubi.jpeg" />
</body>
</html>Veoma koncizno — ukratko, Erge je moćan.
Dobro, sačuvajte konfiguracioni fajl i izvršite reload Nginx-a, zatim u lokalnom pretraživaču unesite IP adresu servera i videćete rezultat.

Pet: Materijali za učenje Nginx-a
O balansiranju opterećenja i razdvajanju statike i dinamike u Nginx-u pisaćemo kad budemo imali prilike. Uvod u Nginx je veoma jednostavan, ali iskreno, da biste Nginx dobro koristili u praksi, potrebno je uložiti određeni napor.
Ovde ću vam preporučiti nekoliko dobrih materijala za učenje.
1) Video uvodni tutorijal „Kuang Shen Shuo” — lično smatram da je Kuang Shen-ov uvodni tutorijal veoma prijatan, sa dobrim tempom i sadržajem.

https://www.bilibili.com/video/BV1F5411J7vK
2) Nginx tutorijal „Heima Programmer” — ukupno 159 lekcija, što suštinski predstavlja veoma sveobuhvatan video tutorijal o Nginx-u.

https://www.bilibili.com/video/BV1ov41187bq
3) Nginx 100 lekcija na Geek Time-u — ide malo dublje i obuhvata dosta stvari na nivou principa. Ako imate dublji džep, možete platiti pristup: http://gk.link/a/12eru
4) „Nginx od uvoda do prakse, detaljno objašnjenje u 10000 reči” — verzija sa slikama i tekstom, možete pogledati ovaj članak na Juejin-u. Sadržaj je uglavnom sveobuhvatan (pogledajte sadržaj ispod), a u kombinaciji sa prethodnim video kursevima, savlađivanje Nginx-a je praktično zagarantovano.

https://juejin.cn/post/6844904144235413512
Ako uspete da prođete kroz sve ove materijale, prozvaću vas Nginx princom — kada vaša kompanija naiđe na Nginx problem, vi ćete sigurno biti onaj ko ga rešava.
