Spletni strežnik
Učni list 5: Vzpostavitev spletnega strežnika z Nginx¶
Namen vaje¶
Tvoja naloga je, da vzpostaviš spletni strežnik, objaviš svojo testno stran in razumeš osnovni tok HTTP zahtevka.
Kako brati mikro razlage¶
- razčlenitev sintakse — kaj pomeni posamezni del ukaza
- kaj se zgodi po pritisku Enter — neposredna posledica v sistemu ali omrežju
- na kaj ukaz vpliva — datoteka, proces ali port
- kaj pričakuješ kot rezultat — konkretna kontrolna točka
Cilj je, da ne ostaneš na ravni prepisal sem ukaz, ampak prideš do ravni vem, zakaj sem ga izvedel in kaj moram po njem preveriti.
Cilji¶
- znaš namestiti Nginx
- razumeš, kaj sta HTTP zahteva in odgovor
- znaš pripraviti osnovno spletno vsebino
- znaš ustvariti ločen server block za laboratorijsko domeno
- znaš storitev testirati z
curlin brskalnikom
Potrebna oprema in predznanje¶
- klient doseže strežnik po omrežju
- DNS zapis
www.lab.localkaže na strežnik ali je vsaj znan IP strežnika - osnovno poznavanje dela z besedilnimi datotekami
Teorija v ozadju¶
Spletni strežnik posluša HTTP ali HTTPS zahteve in vrača vsebino. Ta vsebina je lahko statična HTML datoteka ali pa rezultat aplikacije.
Nginx je priljubljen spletni strežnik in reverse proxy. V tej vaji ga uporabljamo v najpreprostejši obliki: kot strežnik za statično spletno stran.
Ko v brskalniku odpreš naslov, klient najprej razreši ime v IP, nato odpre TCP povezavo na port 80 in pošlje HTTP zahtevo. Strežnik odgovori z glavo in vsebino strani.
Na kaj je treba paziti¶
- Pred aktivacijo nove strani vedno preveri konfiguracijo z
nginx -t. - Če v
rootpoti zgrešiš direktorij, boš dobil 404 ali prazno stran. - Ne mešaj “DNS ne dela” s “Nginx ne dela”. Če po IP deluje, po imenu pa ne, problem ni v Nginxu.
Kako brati to vajo
Vsak korak ima tri plasti: kaj narediš, kaj ukaz pomeni in kaj se v ozadju zgodi v sistemu ali omrežju. Cilj ni slepo kopiranje ukazov, ampak razumevanje, zakaj posamezni korak obstaja.
Navodila po korakih¶
1. Namesti Nginx¶
Kaj narediš
Na strežniku namesti spletni strežnik Nginx.
Ukazi
Mikro razlaga ukazov¶
Ukaz 1: sudo apt update
- Razčlenitev sintakse:
sudoukaz izvede z administratorskimi pravicami.aptje upravljalnik paketov na Debian/Ubuntu sistemih.updatene namešča programov; samo osveži lokalni seznam paketov iz repozitorijev.- Kaj se zgodi po pritisku Enter: Sistem osveži lokalne informacije o paketih. Ni še spremembe storitev, ampak priprava na korektno namestitev ali posodobitev.
- Na kaj ta ukaz vpliva:
- Ugotovi, ali ukaz stanje samo preveri ali ga spremeni.
- Kaj pričakuješ kot rezultat: Poišči en jasen, preverljiv učinek.
Ukaz 2: sudo apt install nginx -y
- Razčlenitev sintakse:
installnamesti navedene pakete:nginx.-ysamodejno potrdi namestitev.- Kaj se zgodi po pritisku Enter: Na sistem se namesti nov paket oziroma storitev. Ob tem se pogosto ustvarijo konfiguracijske datoteke, sistemska enota
systemdin včasih se servis zažene že sam. - Na kaj ta ukaz vpliva:
- Datoteke:
/etc/nginx/sites-available/lab.local,/etc/nginx/sites-enabled/lab.local,/var/www/lab.local/html/index.html - Procesi/storitve:
nginx - Porti:
80/TCP - Kaj pričakuješ kot rezultat: Paket se namesti brez napake, na koncu pa ni vrstice tipa
E:alifailed.
Zakaj je korak pomemben¶
Če ta ukaz izvedeš brez razumevanja, bo sistem morda na videz deloval, ti pa ne bo jasno, kje iskati napako. Zato po vsakem takem bloku vedno preveri vsaj eno od treh stvari: datoteko, stanje storitve ali omrežni odziv.
Kaj ta korak pomeni
Namestiš servis, ki bo poslušal na portu 80/TCP in vračal spletno vsebino.
Kaj se dogaja v ozadju
Po namestitvi Nginx ustvari privzeti server block in pogosto že objavi osnovno stran “Welcome to nginx!”.
Kaj moraš opaziti
Servis se po namestitvi praviloma sam zažene.
Če ne dela, preveri
- Če namestitev ne uspe, preveri internetno povezavo prek NAT.
2. Preveri stanje servisa in poslušanje na portu 80¶
Kaj narediš
Preveri, ali Nginx teče in ali posluša na pravem portu.
Ukazi
Mikro razlaga ukazov¶
Ukaz 1: sudo systemctl status nginx
- Razčlenitev sintakse:
systemctlupravlja storitve vsystemd.status nginxpokaže, ali je enotanginxaktivna, kdaj je bila zagnana in ali je javila napake.- Kaj se zgodi po pritisku Enter: Ne spreminja sistema, ampak ti da opazovalno točko: ali storitev teče, od kdaj teče in ali javlja napake.
- Na kaj ta ukaz vpliva:
- Datoteke:
/etc/nginx/sites-available/lab.local,/etc/nginx/sites-enabled/lab.local,/var/www/lab.local/html/index.html - Procesi/storitve:
nginx - Porti:
80/TCP - Kaj pričakuješ kot rezultat: V izpisu iščeš stanje
active (running)ali vsaj jasen razlog, zakaj storitev ni aktivna.
Ukaz 2: ss -tulpen | grep :80
- Razčlenitev sintakse:
sspokaže odprte mrežne vtičnice.-tprikaže TCP,-uUDP,-lposlušajoče vtičnice,-pprocese,-edodatne podatke,-nnumerične porte brez pretvarjanja v imena.grep :80izloči vrstice za port80.- Kaj se zgodi po pritisku Enter: Pregleduješ stanje mrežnih vtičnic v jedru. Tako preveriš, ali je storitev res odprla pričakovani port.
- Na kaj ta ukaz vpliva:
- Ugotovi, ali ukaz stanje samo preveri ali ga spremeni.
- Kaj pričakuješ kot rezultat: V izpisu vidiš pričakovani port in pravilni proces, ki posluša promet.
Zakaj je korak pomemben¶
Če ta ukaz izvedeš brez razumevanja, bo sistem morda na videz deloval, ti pa ne bo jasno, kje iskati napako. Zato po vsakem takem bloku vedno preveri vsaj eno od treh stvari: datoteko, stanje storitve ali omrežni odziv.
Kaj ta korak pomeni
Najprej preveri infrastrukturo servisa. Če port 80 ni odprt, spletna stran še ne more delovati, pa če je HTML še tako lep.
Kaj se dogaja v ozadju
Nginx kot proces odpre port 80 in čaka na nove povezave klientov.
Kaj moraš opaziti
Pričakuješ active (running) in port 80 v izpisu.
Če ne dela, preveri
- Če port 80 zaseda drug proces, Nginx ne bo mogel uspešno teči.
3. Preveri privzeto stran s strežnika samega¶
Kaj narediš
Najprej preizkusi odziv lokalno na strežniku.
Ukazi
Mikro razlaga ukazov¶
Ukaz 1: curl http://localhost
- Razčlenitev sintakse:
curlpošlje HTTP zahtevo nahttp://localhostin izpiše odgovor.- To je hiter način za test brez grafičnega brskalnika.
- Kaj se zgodi po pritisku Enter: Pošlje se HTTP zahteva. Če spletni strežnik deluje, dobiš HTML ali vsaj odgovor z glavo in vsebino.
- Na kaj ta ukaz vpliva:
- Porti:
80/TCP - Kaj pričakuješ kot rezultat: Na zaslonu vidiš HTML odziv ali vsebino testne strani, ne pa napake povezave.
Zakaj je korak pomemben¶
Če ta ukaz izvedeš brez razumevanja, bo sistem morda na videz deloval, ti pa ne bo jasno, kje iskati napako. Zato po vsakem takem bloku vedno preveri vsaj eno od treh stvari: datoteko, stanje storitve ali omrežni odziv.
Kaj ta korak pomeni
S tem ugotoviš, ali aplikacijska storitev deluje brez vpliva omrežja, DNS-a ali klienta. To je zelo koristna diagnostična metoda.
Kaj se dogaja v ozadju
curl pošlje HTTP zahtevo kar na isti računalnik. Če to deluje, je Nginx načeloma v redu.
Kaj moraš opaziti
Izpis HTML kode ali privzete strani potrdi, da Nginx odgovarja.
Če ne dela, preveri
- Če lokalno ne dela, je težava v Nginxu, ne v omrežju.
4. Pripravi direktorij za laboratorijsko stran¶
Kaj narediš
Ustvari poseben direktorij za spletno vsebino domene lab.local.
Ukazi
Mikro razlaga ukazov¶
Ukaz 1: sudo mkdir -p /var/www/lab.local/html
- Razčlenitev sintakse:
sudoje potreben, ker ustvarjaš mapo v sistemskem delu datotečnega sistema.mkdir -pustvari pot tudi z vmesnimi mapami.- Cilj je
/var/www/lab.local/html. - Kaj se zgodi po pritisku Enter: Takoj preveri, kaj se je spremenilo.
- Na kaj ta ukaz vpliva:
- Ugotovi, ali ukaz stanje samo preveri ali ga spremeni.
- Kaj pričakuješ kot rezultat: Poišči en jasen, preverljiv učinek.
Ukaz 2: sudo chown -R $USER:$USER /var/www/lab.local/html
- Razčlenitev sintakse:
chownspremeni lastnika in skupino.-Rpomeni rekurzivno za celotno drevo/var/www/lab.local/html.- Nov lastnik bo
$USER, nova skupina pa$USER. - Kaj se zgodi po pritisku Enter: Takoj preveri, kaj se je spremenilo.
- Na kaj ta ukaz vpliva:
- Ugotovi, ali ukaz stanje samo preveri ali ga spremeni.
- Kaj pričakuješ kot rezultat: Poišči en jasen, preverljiv učinek.
Zakaj je korak pomemben¶
Če ta ukaz izvedeš brez razumevanja, bo sistem morda na videz deloval, ti pa ne bo jasno, kje iskati napako. Zato po vsakem takem bloku vedno preveri vsaj eno od treh stvari: datoteko, stanje storitve ali omrežni odziv.
Kaj ta korak pomeni
S tem ločiš svojo spletno vsebino od privzete Nginx strani. To je čistejši in bolj profesionalen pristop kot prepisovanje sistemskih datotek.
Kaj se dogaja v ozadju
Večina spletnih strežnikov uporablja koncept dokumentnega korena (document root) — direktorij, iz katerega streže datoteke.
Kaj moraš opaziti
Direktorij obstaja in uporabnik ima pravice za pisanje vanj.
Če ne dela, preveri
- Če ni pravic za pisanje, bo urejanje strani oteženo ali nemogoče brez
sudo.
5. Ustvari testno HTML stran¶
Kaj narediš
V korenski spletni mapi ustvari preprosto HTML datoteko.
Ukazi
Mikro razlaga ukazov¶
Ukaz 1: nano /var/www/lab.local/html/index.html
- Razčlenitev sintakse:
- Odpre datoteko v terminalskem urejevalniku
nano. - Kaj se zgodi po pritisku Enter: Sprememba se še ne zgodi v teku storitve. Najprej spremeniš datoteko na disku; učinek nastopi šele po restartu ali reloadu storitve.
- Na kaj ta ukaz vpliva:
- Ugotovi, ali ukaz stanje samo preveri ali ga spremeni.
- Kaj pričakuješ kot rezultat: Poišči en jasen, preverljiv učinek.
Zakaj je korak pomemben¶
Če ta ukaz izvedeš brez razumevanja, bo sistem morda na videz deloval, ti pa ne bo jasno, kje iskati napako. Zato po vsakem takem bloku vedno preveri vsaj eno od treh stvari: datoteko, stanje storitve ali omrežni odziv.
Primer konfiguracije
<!DOCTYPE html>
<html lang="sl">
<head>
<meta charset="UTF-8">
<title>Laboratorij omrežnih servisov</title>
</head>
<body>
<h1>Nginx deluje</h1>
<p>To je stran iz laboratorijskega strežnika.</p>
</body>
</html>
Kaj ta korak pomeni
Cilj ni umetnost, ampak dokaz, da strežnik vrača točno tvojo vsebino.
Kaj se dogaja v ozadju
Ko bo klient zahteval /, bo Nginx iskal privzeto datoteko index.html v dokumentnem korenu.
Kaj moraš opaziti
Datoteka mora biti shranjena v novem direktoriju.
Če ne dela, preveri
- Če je datoteka prazna ali napačno poimenovana, bo rezultat drugačen od pričakovanega.
6. Ustvari nov server block za www.lab.local¶
Kaj narediš
Namesto privzete strani pripravi namenski Nginx vhost.
Ukazi
Mikro razlaga ukazov¶
Ukaz 1: sudo nano /etc/nginx/sites-available/lab.local
- Razčlenitev sintakse:
nanoodpre besedilno datoteko v terminalskem urejevalniku.- Odpira se datoteka
/etc/nginx/sites-available/lab.local. Če datoteka še ne obstaja, jo boš ob shranjevanju ustvaril. - Kaj se zgodi po pritisku Enter: Sprememba se še ne zgodi v teku storitve. Najprej spremeniš datoteko na disku; učinek nastopi šele po restartu ali reloadu storitve.
- Na kaj ta ukaz vpliva:
- Datoteke:
/etc/nginx/sites-available/lab.local,/etc/nginx/sites-enabled/lab.local,/var/www/lab.local/html/index.html - Procesi/storitve:
nginx - Porti:
80/TCP - Kaj pričakuješ kot rezultat: Poišči en jasen, preverljiv učinek.
Zakaj je korak pomemben¶
Če ta ukaz izvedeš brez razumevanja, bo sistem morda na videz deloval, ti pa ne bo jasno, kje iskati napako. Zato po vsakem takem bloku vedno preveri vsaj eno od treh stvari: datoteko, stanje storitve ali omrežni odziv.
Primer konfiguracije
server {
listen 80;
server_name www.lab.local lab.local;
root /var/www/lab.local/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Kako prebrati ta server block
listen 80pomeni, da Nginx posluša navadne HTTP zahteve na portu80server_name www.lab.local lab.localpove, za katera imena velja ta konfiguracijaroot /var/www/lab.local/htmldoloči mapo, iz katere se berejo datoteketry_files $uri $uri/ =404pomeni: če zahtevana datoteka ne obstaja, vrni napako404
Kaj ta korak pomeni
Server block pove Nginxu, za katera imena velja in iz katerega direktorija naj streže vsebino.
Kaj se dogaja v ozadju
Nginx na podlagi glave Host iz HTTP zahteve izbere ustrezen server block. Zato je povezava med DNS in spletnim strežnikom zelo tesna.
Kaj moraš opaziti
Konfiguracija mora vsebovati server_name in root.
Če ne dela, preveri
- Če je
server_namenapačen, bo zahteva morda padla na privzeto stran.
7. Aktiviraj stran, preveri konfiguracijo in reloadaj Nginx¶
Kaj narediš
Ustvari simbolno povezavo v sites-enabled, preveri sintakso in naloži novo konfiguracijo.
Ukazi
sudo ln -s /etc/nginx/sites-available/lab.local /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
Mikro razlaga ukazov¶
Ukaz 1: sudo ln -s /etc/nginx/sites-available/lab.local /etc/nginx/sites-enabled/
- Razčlenitev sintakse:
ln -sustvari simbolno povezavo iz/etc/nginx/sites-enabled/na izvor/etc/nginx/sites-available/lab.local.- Pri Nginx-u to pomeni: konfiguracija obstaja v
sites-available, aktivira pa se prek povezave vsites-enabled. - Kaj se zgodi po pritisku Enter: Takoj preveri, kaj se je spremenilo.
- Na kaj ta ukaz vpliva:
- Datoteke:
/etc/nginx/sites-available/lab.local,/etc/nginx/sites-enabled/lab.local,/var/www/lab.local/html/index.html - Procesi/storitve:
nginx - Porti:
80/TCP - Kaj pričakuješ kot rezultat: Poišči en jasen, preverljiv učinek.
Ukaz 2: sudo rm -f /etc/nginx/sites-enabled/default
- Razčlenitev sintakse:
rmizbriše datoteko ali povezavo/etc/nginx/sites-enabled/default.-fpomeni, da ne sprašuje za potrditev in ne teži, če datoteka ne obstaja.- Kaj se zgodi po pritisku Enter: Takoj preveri, kaj se je spremenilo.
- Na kaj ta ukaz vpliva:
- Datoteke:
/etc/nginx/sites-available/lab.local,/etc/nginx/sites-enabled/lab.local,/var/www/lab.local/html/index.html - Procesi/storitve:
nginx - Porti:
80/TCP - Kaj pričakuješ kot rezultat: Poišči en jasen, preverljiv učinek.
Ukaz 3: sudo nginx -t
- Razčlenitev sintakse:
- Preveri sintakso in skladnost Nginx konfiguracije, preden jo naložiš v delujoči strežnik.
- Kaj se zgodi po pritisku Enter: Takoj preveri, kaj se je spremenilo.
- Na kaj ta ukaz vpliva:
- Datoteke:
/etc/nginx/sites-available/lab.local,/etc/nginx/sites-enabled/lab.local,/var/www/lab.local/html/index.html - Procesi/storitve:
nginx - Porti:
80/TCP - Kaj pričakuješ kot rezultat: Poišči en jasen, preverljiv učinek.
Ukaz 4: sudo systemctl reload nginx
- Razčlenitev sintakse:
reloadpove Nginx-u, naj ponovno prebere konfiguracijo, ne da bi brutalno prekinil obstoječe povezave.- Kaj se zgodi po pritisku Enter: Proces storitve ponovno prebere konfiguracijo. Če je konfiguracija napačna, se storitev lahko ne zažene ali ostane v stanju napake.
- Na kaj ta ukaz vpliva:
- Datoteke:
/etc/nginx/sites-available/lab.local,/etc/nginx/sites-enabled/lab.local,/var/www/lab.local/html/index.html - Procesi/storitve:
nginx - Porti:
80/TCP - Kaj pričakuješ kot rezultat: Poišči en jasen, preverljiv učinek.
Zakaj je korak pomemben¶
Če ta ukaz izvedeš brez razumevanja, bo sistem morda na videz deloval, ti pa ne bo jasno, kje iskati napako. Zato po vsakem takem bloku vedno preveri vsaj eno od treh stvari: datoteko, stanje storitve ali omrežni odziv.
Kaj ta korak pomeni
S simbolno povezavo vhost aktiviraš. nginx -t je obvezen refleks, ker ti ujame sintaktične napake preden uporabnikom sesuješ strežnik.
Kaj se dogaja v ozadju
Reload pomeni, da Nginx prebere novo konfiguracijo, ne da bi nujno ubil vse obstoječe procese.
Kaj moraš opaziti
Pri nginx -t pričakuješ syntax is ok in test is successful.
Če ne dela, preveri
- Če reload ne uspe, ne ugibaj — napaka bo izpisana že pri
nginx -t.
8. S klienta preveri stran po imenu in po IP naslovu¶
Kaj narediš
Na klientu uporabi curl, po želji pa še grafični brskalnik.
Ukazi
Mikro razlaga ukazov¶
Ukaz 1: curl http://192.168.56.10
- Razčlenitev sintakse:
curlpošlje HTTP zahtevo nahttp://192.168.56.10in izpiše odgovor.- To je hiter način za test brez grafičnega brskalnika.
- Kaj se zgodi po pritisku Enter: Pošlje se HTTP zahteva. Če spletni strežnik deluje, dobiš HTML ali vsaj odgovor z glavo in vsebino.
- Na kaj ta ukaz vpliva:
- Porti:
80/TCP - Kaj pričakuješ kot rezultat: Na zaslonu vidiš HTML odziv ali vsebino testne strani, ne pa napake povezave.
Ukaz 2: curl http://www.lab.local
- Razčlenitev sintakse:
curlpošlje HTTP zahtevo nahttp://www.lab.localin izpiše odgovor.- To je hiter način za test brez grafičnega brskalnika.
- Kaj se zgodi po pritisku Enter: Pošlje se HTTP zahteva. Če spletni strežnik deluje, dobiš HTML ali vsaj odgovor z glavo in vsebino.
- Na kaj ta ukaz vpliva:
- Porti:
80/TCP - Kaj pričakuješ kot rezultat: Na zaslonu vidiš HTML odziv ali vsebino testne strani, ne pa napake povezave.
Zakaj je korak pomemben¶
Če ta ukaz izvedeš brez razumevanja, bo sistem morda na videz deloval, ti pa ne bo jasno, kje iskati napako. Zato po vsakem takem bloku vedno preveri vsaj eno od treh stvari: datoteko, stanje storitve ali omrežni odziv.
Kaj ta korak pomeni
Test po IP naslovu preveri spletni strežnik. Test po imenu pa dodatno preveri, ali pravilno delujeta DNS in server_name.
Kaj se dogaja v ozadju
To je lep primer verige odvisnosti: brskalnik → DNS → TCP → HTTP → Nginx → datoteka na disku.
Kaj moraš opaziti
V obeh primerih moraš dobiti svojo HTML vsebino.
Če ne dela, preveri
- Če po IP deluje, po imenu pa ne, se vrni na DNS. Če ne deluje niti po IP, se vrni na Nginx ali požarni zid.
Preverjanje delovanja¶
- [ ] Nginx je nameščen in teče
- [ ] port 80 posluša
- [ ] ustvarjen je ločen server block za
www.lab.local - [ ] klient dobi pravilno spletno stran po IP-ju in po imenu
- [ ] znaš opisati potek HTTP zahteve
Vprašanja za razmislek¶
- Kaj je vloga spletnega strežnika?
- Zakaj ustvarimo ločen server block namesto spreminjanja privzete strani?
- Kaj preveri
nginx -t? - Če stran deluje po IP-ju, po imenu pa ne, kje iščeš težavo?
Dodatni izziv¶
Dodaj še drugo stran, npr. status.lab.local, z ločenim direktorijem in drugačno vsebino. Nato razloži, kako Nginx ve, katero stran mora vrniti.
Mini povzetek¶
Po tej vaji moraš znati na kratko razložiti, kaj je vloga servisa vzpostavitev spletnega strežnika v omrežju, kateri proces ali konfiguracija ga omogoča in kako ga preverimo s klienta.