Preskoči na vsebino

Nastavitve piškotkov

Za vsako vrsto izberite, katere piškotke dovolite. Svojo izbiro lahko kadar koli spremenite prek povezave Nastavitve piškotkov na dnu vsake strani. Izjava o zasebnosti

Nujni

Vedno vklopljeno

Potrebni so za prijavo, shranjevanje košarice in pomnjenje Vaših izbir. Vedno so vklopljeni.

Kateri piškotki?
  • weboke_sessie, weboke_klant, weboke_remember: Vaša seja in ohranjanje prijave
  • weboke_basket: Vaša košarica
  • wkBtwIncl: prikaz cen z DDV ali brez DDV
  • wok_cookies: Vaša izbira glede piškotkov, 12 mesecev

Meri, kateri oglas vodi do obiska ali naročila, da ne plačujemo za oglase, ki ne prinesejo ničesar.

Kateri piškotki?
  • Google Ads prek Google Tag Manager (_gcl_au, _gcl_aw), do 90 dni
  • OpenAI Ads, oglasi v ChatGPT
  • wok_aff: prek katerega partnerja ste prišli k nam (partnerski program), 60 dni

4,6

Država in jezik

Vsaka država ima svojo spletno stran, s cenami in DDV za to državo.

Prikaži

Spletni strežnik z nginx

Modul 7: Domena, spletni strežnik in https · Čas branja: 12 minut

Učni cilj: Po tej lekciji boste znali namestiti nginx, s server blockom nastaviti spletno mesto in reverse proxy, varno preizkusiti in znova naložiti konfiguracijo ter pravilno nastaviti pravice svojega webroota.

Ključni pojmi: nginx, server block, sites-available in sites-enabled, conf.d, listen, server_name, root, index, try_files, default server, nginx -t, reload, reverse proxy, proxy_pass, Host, X-Forwarded-For, X-Forwarded-Proto, webroot, PHP-FPM

Kaj počne spletni strežnik

Spletni strežnik posluša na vratih 80 (http) in 443 (https), sprejema zahteve brskalnikov in nekaj vrne: datoteko z diska (statično spletno mesto) ali odgovor programa, ki teče za njim (PHP, aplikacija Node.js, vsebnik). V drugem primeru spletnemu strežniku pravimo reverse proxy (obratni posrednik): stoji spredaj, skrbi za https in zahtevo posreduje aplikaciji, ki posluša samo na 127.0.0.1.

Na Linuxu sta najbolj znana spletna strežnika nginx in Apache, Caddy (lekcija 7.4) pa je sodobna alternativa, ki sama poskrbi za certifikate. V tej lekciji uporabljamo nginx: na voljo je v vsaki distribuciji, porabi malo pomnilnika in je privzeta izbira v mnogih navodilih.

Namestitev in prvi pogled

anna@web1:~$ sudo apt install nginx
anna@web1:~$ systemctl status nginx
anna@web1:~$ curl -I http://localhost
HTTP/1.1 200 OK
Server: nginx/1.26.3
Content-Type: text/html

(Številka različice je zgolj primer.) Ne pozabite na požarni zid: vrata 80 in 443 morajo biti odprta (lekcija 5.2). Če zdaj odprete http://192.0.2.10, boste videli pozdravno stran nginx.

Konfiguracija je v /etc/nginx/:

PotKaj
nginx.confglavna datoteka; običajno je ne spreminjate
sites-available/ena datoteka na spletno mesto (Debian in Ubuntu)
sites-enabled/povezave (symlinki) do vklopljenih spletnih mest
conf.d/*.confposamezne nastavitve, ki se vedno naložijo
snippets/delčki, ki jih uporabite v več spletnih mestih

sites-available in sites-enabled sta navada Debiana in Ubuntuja: tako spletno mesto vklopite ali izklopite tako, da ustvarite ali odstranite povezavo, ne da bi izbrisali datoteko.

Prvo spletno mesto

Ustvarite mapo za spletno mesto in testno stran:

anna@web1:~$ sudo mkdir -p /var/www/example.com
anna@web1:~$ echo '<h1>Het werkt</h1>' | sudo tee /var/www/example.com/index.html

Nato ustvarite server block: opis enega spletnega mesta.

# /etc/nginx/sites-available/example.com
server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;
}

Preberite ga takole:

  • listen 80; in listen [::]:80; poskrbita, da nginx posluša na IPv4 in IPv6. Če pozabite drugo vrstico, Vaš zapis AAAA ne bo deloval (lekcija 7.1).
  • server_name pove, za katera imena velja ta blok. nginx pri vsaki zahtevi pogleda ime, ki ga zahteva brskalnik (glava Host), in izbere ustrezen blok.
  • root je mapa z datotekami, index pa datoteka, ki se prikaže pri mapi.
  • try_files poskusi zahtevano datoteko, nato mapo, sicer pa vrne 404. Brez take vrstice lahko napačna konfiguracija prikaže več, kot želite.
  • Lastne dnevniške datoteke za vsako spletno mesto močno olajšajo iskanje (lekcija 6.2).

Vklopite spletno mesto, odstranite privzeto spletno mesto, preizkusite in znova naložite:

anna@web1:~$ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
anna@web1:~$ sudo rm /etc/nginx/sites-enabled/default
anna@web1:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
anna@web1:~$ sudo systemctl reload nginx
anna@web1:~$ curl -I http://example.com
HTTP/1.1 200 OK

Naj Vam nginx -t pred vsakim reloadom postane stalna navada. Ob napaki Vam pove, katera datoteka in katera vrstica, Vaše delujoče spletno mesto pa ostane nedotaknjeno. Če ponovno zaženete brez preizkusa, se nginx z napako ne zažene več in vsa Vaša spletna mesta so nedosegljiva (lekcija 6.1).

Default server: kaj dobi neznano ime?

Kaj se zgodi, če nekdo Vaš strežnik zahteva z imenom, ki ni v nobenem server_name, ali kar z naslovom IP? Takrat nginx izbere default server: blok z default_server za listen, sicer pa prvi blok, na katerega je naletel. Če o tem ne razmislite, je to torej eno od Vaših pravih spletnih mest.

Bolje je imeti ločen blok, ki take zahteve zavrne:

# /etc/nginx/sites-available/000-default
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 444;
}

444 je posebna koda nginx: povezava se zapre brez odgovora. Pregledovalniki, ki preiskujejo naslove IP, tako ne vidijo ničesar. Za https (vrata 443) default server deluje nekoliko drugače, ker potrebuje certifikat; k temu se vrnemo v lekciji 7.3.

nginx kot reverse proxy

Če aplikacija teče na 127.0.0.1:3000 (lekcija 6.3) ali vsebnik na 127.0.0.1:3001 (lekcija 9.3), jo nginx izpostavi navzven:

server {
    listen 80;
    listen [::]:80;
    server_name app.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Štiri vrstice proxy_set_header so pomembne. Brez Host aplikacija ne ve, pod katerim imenom jo obiskujejo. Brez X-Forwarded-For aplikacija vidi, da vsak obisk prihaja z 127.0.0.1 (posrednika), namesto s pravega naslova obiskovalca. Brez X-Forwarded-Proto aplikacija misli, da vse poteka prek http, in včasih ustvari povezave ali piškotke za http, čeprav Vaše spletno mesto teče prek https. Številne aplikacije imajo nastavitev, s katero zaupajo tem glavam ("trusted proxy"); vanjo vpišite samo 127.0.0.1, sicer lahko vsak obiskovalec pošlje lažen naslov.

Aplikacije, ki uporabljajo websockete (sprotne posodobitve, na primer Uptime Kuma), potrebujejo še dve vrstici: proxy_http_version 1.1; in posredovanje Upgrade ter Connection. Dokumentacija aplikacije običajno natančno pove, katere.

Pravice webroota

nginx na Debianu in Ubuntuju svoje delovne procese izvaja kot uporabnik www-data. Ta mora Vaše datoteke znati brati, ne sme pa jih pisati. Dobra razporeditev (lekcija 3.1):

anna@web1:~$ sudo chown -R anna:www-data /var/www/example.com
anna@web1:~$ sudo find /var/www/example.com -type d -exec chmod 750 {} \;
anna@web1:~$ sudo find /var/www/example.com -type f -exec chmod 640 {} \;

Vi (anna) upravljate datoteke, skupina www-data sme brati, ostali nič. Če mora spletno mesto nekam pisati, na primer v mapo za nalaganje datotek, dajte pravice pisanja za www-data samo tej mapi. Nikoli chmod 777 (lekcija 10.2). Če dobite 403 Forbidden, poglejte v dnevnik napak spletnega mesta: tam piše permission denied skupaj s potjo.

Še nekaj dobrih navad:

  • Nobenih skrivnosti v webrootu. Varnostne kopije (site.zip), datoteke .env in mape .git ne sodijo vanj; če jih tja pomotoma vseeno postavite, jih je mogoče prenesti. Dodatna varovalka: location ~ /\. { deny all; } blokira vse datoteke, ki se začnejo s piko (razen tistega, kar izrecno dovolite, na primer /.well-known/, glejte lekciji 7.3 in 7.4).
  • Skrijte različico. server_tokens off; v nginx.conf odstrani številko različice iz glave Server in s strani z napakami. To ni prava zaščita, pregledovalnikom pa da manj informacij.

Na kratko o PHP

Za spletna mesta v PHP (na primer WordPress) nginx komunicira s PHP-FPM, ločeno storitvijo. Na Debianu namestite php-fpm in v server block dodate blok location ~ \.php$ z include snippets/fastcgi-php.conf; in fastcgi_pass unix:/run/php/php8.4-fpm.sock; (številka različice se razlikuje glede na izdajo). Tečaj o WordPressu se temu posveti podrobneje.

Na AlmaLinux in Rocky Linux

Tam sites-available ni: vsako spletno mesto postavite kot svojo datoteko v /etc/nginx/conf.d/<naam>.conf. nginx teče kot uporabnik nginx namesto www-data, privzeti webroot pa je /usr/share/nginx/html. SELinux privzeto ne dovoli, da bi se nginx povezal z aplikacijo za proxy_pass; to vklopite z setsebool -P httpd_can_network_connect 1. Datoteke zunaj običajnih map potrebujejo oznako SELinux (semanage fcontext in restorecon).

Povzetek

  • nginx streže datoteke ali kot reverse proxy posreduje zahteve aplikaciji na 127.0.0.1.
  • En server block na spletno mesto v sites-available, vklop s povezavo v sites-enabled; poslušajte na 80 in [::]:80.
  • Vedno nginx -t pred systemctl reload nginx.
  • Lasten default server z return 444 prepreči, da bi neznano ime ali goli naslov IP prikazal eno od Vaših spletnih mest.
  • Kot reverse proxy posredujete Host, X-Forwarded-For in X-Forwarded-Proto; webroot je berljiv za www-data, ni zapisljiv in ne vsebuje skrivnosti.

Kviz

1. Spremenili ste server block. Kakšen je varen vrstni red?



2. Vaše spletno mesto deluje prek IPv4, ne pa prek IPv6, čeprav je zapis AAAA pravilen in požarni zid dovoljuje IPv6. Kaj najverjetneje manjka v server blocku?



3. Nekdo odpre http://192.0.2.10 (goli naslov IP) in vidi spletno mesto enega od Vaših strank. Kako to preprečite?



4. Vaša aplikacija za proxy_pass pri vsakem obisku vidi naslov 127.0.0.1. Kaj manjka?



5. Katere pravice so primerne za datoteke statičnega spletnega mesta v /var/www/example.com?



Naloga

Naloga O7.2: Vaše prvo spletno mesto. Namestite nginx (ali uporabite Caddy iz lekcije 7.4) in ustvarite server block za (pod)domeno, ki kaže na Vaš strežnik, z listen za IPv4 in IPv6, lastnimi dnevniškimi datotekami in lastnim default serverjem. Preizkusite z nginx -t, znova naložite in preverite z curl -I prek IPv4 in IPv6. Pravice webroota nastavite, kot je opisano v lekciji. Izpolnite kontrolni seznam in prilepite svoj server block.

Naloga O7.2: Vaše prvo spletno mesto

To nalogo opravite sami; nihče je ne pregleda. Odkljukajte, kar ste naredili, in nalogo označite kot opravljeno.




Vaše kljukice in zapiski ostanejo samo v tem brskalniku, nikamor jih ne pošiljamo. Če ste prijavljeni, v Moji tečaji shranimo samo podatek, da ste nalogo opravili.

Za nadaljnje branje

Trenutek…

Nastavite svoje domene

Za vsako domeno uredite imenske strežnike, povezavo z gostovanjem in kdo bo imetnik.

Nalaganje Vaših domen…