Skip to content

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 curl in brskalnikom
Potrebna oprema in predznanje
  • klient doseže strežnik po omrežju
  • DNS zapis www.lab.local kaž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 root poti 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.

1. Namesti Nginx

Kaj narediš

Na strežniku namesti spletni strežnik Nginx.

Ukazi

sudo apt update
sudo apt install nginx -y
Mikro razlaga ukazov

Ukaz 1: sudo apt update

  • Razčlenitev sintakse:
  • sudo ukaz izvede z administratorskimi pravicami.
  • apt je upravljalnik paketov na Debian/Ubuntu sistemih.
  • update ne 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:
  • install namesti navedene pakete: nginx.
  • -y samodejno 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 systemd in 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: ali failed.
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

sudo systemctl status nginx
ss -tulpen | grep :80
Mikro razlaga ukazov

Ukaz 1: sudo systemctl status nginx

  • Razčlenitev sintakse:
  • systemctl upravlja storitve v systemd.
  • status nginx pokaže, ali je enota nginx aktivna, 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:
  • ss pokaže odprte mrežne vtičnice.
  • -t prikaže TCP, -u UDP, -l poslušajoče vtičnice, -p procese, -e dodatne podatke, -n numerične porte brez pretvarjanja v imena.
  • grep :80 izloči vrstice za port 80.
  • 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

curl http://localhost
Mikro razlaga ukazov

Ukaz 1: curl http://localhost

  • Razčlenitev sintakse:
  • curl pošlje HTTP zahtevo na http://localhost in 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

sudo mkdir -p /var/www/lab.local/html
sudo chown -R $USER:$USER /var/www/lab.local/html
Mikro razlaga ukazov

Ukaz 1: sudo mkdir -p /var/www/lab.local/html

  • Razčlenitev sintakse:
  • sudo je potreben, ker ustvarjaš mapo v sistemskem delu datotečnega sistema.
  • mkdir -p ustvari 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:
  • chown spremeni lastnika in skupino.
  • -R pomeni 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

nano /var/www/lab.local/html/index.html
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

sudo nano /etc/nginx/sites-available/lab.local
Mikro razlaga ukazov

Ukaz 1: sudo nano /etc/nginx/sites-available/lab.local

  • Razčlenitev sintakse:
  • nano odpre 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 80 pomeni, da Nginx posluša navadne HTTP zahteve na portu 80
  • server_name www.lab.local lab.local pove, za katera imena velja ta konfiguracija
  • root /var/www/lab.local/html določi mapo, iz katere se berejo datoteke
  • try_files $uri $uri/ =404 pomeni: če zahtevana datoteka ne obstaja, vrni napako 404

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_name napač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 -s ustvari 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 v sites-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:
  • rm izbriše datoteko ali povezavo /etc/nginx/sites-enabled/default.
  • -f pomeni, 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:
  • reload pove 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

curl http://192.168.56.10
curl http://www.lab.local
Mikro razlaga ukazov

Ukaz 1: curl http://192.168.56.10

  • Razčlenitev sintakse:
  • curl pošlje HTTP zahtevo na http://192.168.56.10 in 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:
  • curl pošlje HTTP zahtevo na http://www.lab.local in 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
  1. Kaj je vloga spletnega strežnika?
  2. Zakaj ustvarimo ločen server block namesto spreminjanja privzete strani?
  3. Kaj preveri nginx -t?
  4. Č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.