5. Spletne storitve - HTTP, HTTPS, spletni strežnik, navidezni gostitelji in reverse proxy¶
5.1 Kaj je spletna storitev¶
Spletna storitev v širšem smislu pomeni, da aplikacija ali vsebina uporablja HTTP oziroma HTTPS kot komunikacijski mehanizem. To je lahko: - statična spletna stran, - dinamična aplikacija, - API, - intranet, - upravljavski portal, - reverse proxy vstopna točka.
5.2 HTTP kot aplikacijski protokol¶
HTTP temelji na modelu zahteva-odgovor.
Odjemalec pošlje zahtevo, strežnik vrne odgovor.
Ključni pojmi:
- metoda (GET, POST, PUT, DELETE ...),
- glave,
- telo,
- statusne kode,
- vsebinski tip,
- brezstanjskost.
Pomemben poudarek: HTTP ni isto kot HTML. HTTP je prenosni mehanizem za spletne vsebine in storitve.
5.3 Zakaj HTTPS ni luksuz, ampak privzeta praksa¶
HTTPS pomeni HTTP prek TLS. Zagotavlja: - šifriranje, - celovitost, - preverjanje identitete strežnika.
Brez HTTPS lahko kdo na poti promet bere ali spreminja. To velja tudi za interne portale, če vsebujejo prijave, osebne podatke ali upravljavske funkcije.
5.4 Kaj je spletni strežnik¶
Spletni strežnik je programska oprema, ki sprejema HTTP/HTTPS zahteve in vrne ustrezen odgovor. Lahko: - servira statične datoteke, - posreduje zahteve aplikaciji, - deluje kot reverse proxy, - terminira TLS, - izvaja preusmeritve, - beleži promet, - omejuje dostop.
5.5 Apache in Nginx - konceptualna razlika¶
Pri pouku je bolj pomembno razumeti vloge kot "navijati" za en program.
- Apache HTTP Server je tradicionalno zelo prilagodljiv in dober za klasične postavitve.
- Nginx je močan pri reverse proxy vlogi, obdelavi velikega števila povezav in modernih spletnih arhitekturah.
Pravilno vprašanje ni "kateri je boljši", ampak: - kakšna je naloga strežnika, - katere odjemalce in aplikacije pričakujemo, - kako pomembni so proxy, TLS termination, caching ali load balancing.
5.6 Navidezni gostitelji¶
Navidezni gostitelj pomeni, da isti strežnik gosti več različnih spletnih mest ali aplikacij. Ločevanje temelji predvsem na: - imenu gostitelja, - portu, - po potrebi IP naslovu.
To je bistvena snov, ker dijaki pogosto mislijo, da za vsako stran potrebuješ poseben strežnik. V resnici lahko en strežnik gosti več storitev, če: - DNS kaže pravilno, - strežnik zna prepoznati pravo ime, - certifikati ustrezajo imenom, - konfiguracija ni konfliktna.
5.7 Reverse proxy¶
Reverse proxy sedi pred aplikacijo in sprejema zahteve v njenem imenu.
Zakaj je uporaben: - skrije notranjo topologijo, - terminira TLS, - usmerja promet na več backendov, - omogoča enotno vstopno točko, - dodaja varnostne glave, - filtrira ali omejuje promet, - omogoča lažjo objavo več storitev.
5.8 Spletna aplikacija ni isto kot spletni strežnik¶
To je zelo pomembna didaktična ločitev: - spletni strežnik sprejema in usmerja promet, - aplikacija izvaja poslovno logiko, - podatkovni strežnik hrani podatke.
Ko dijaki to razumejo, lažje dojamejo večslojno arhitekturo.
5.9 Dobre prakse pri spletnih storitvah¶
- javne storitve izpostavljaj prek HTTPS,
- HTTP preusmeri na HTTPS, kadar je to smiselno,
- ne izpostavljaj aplikacijskih backendov neposredno, če reverse proxy nalogo bolje reši,
- loči statične vsebine, aplikacijski sloj in podatkovni sloj,
- poskrbi za dnevnike dostopov in napak,
- ne puščaj privzetih strani ali testnih aplikacij v produkciji,
- preverjaj certifikate, DNS, vhost logiko in firewall kot celoto.
5.10 Najpogostejši problemi¶
- DNS kaže pravilno, virtual host pa ni pravilen,
- virtual host je pravilen, certifikat pa ne ustreza imenu,
- backend aplikacija ne deluje, reverse proxy pa vrača 502/503,
- port je odprt, a servis posluša le na
localhost, - datoteke obstajajo, a pravice preprečujejo dostop,
- požarni zid blokira 80 ali 443,
- certifikat je potekel.
5.11 Varnostne grožnje pri spletnih storitvah¶
- izpostavljeni administrativni paneli,
- zastarele komponente,
- potekla potrdila,
- napačne pravice datotek,
- preveč razkritih podrobnosti o različici strežnika,
- neustrezna ločitev med testnim in produkcijskim okoljem,
- neposredna izpostavitev podatkovnega strežnika,
- slaba kontrola prijav in gesel.
5.12 Kaj mora dijak razumeti¶
- spletni strežnik ni isto kot spletna aplikacija,
- HTTP ni isto kot HTML,
- certifikat ne "naredi strani", ampak varuje povezavo,
- virtual hosti in DNS skupaj omogočajo več storitev na enem strežniku,
- veliko spletnih težav je v resnici kombinacija DNS + TLS + proxy + pravice + firewall.