Slovník pojmů

Webový server

Webový server je HTTP hranice aplikace: obslouží statické soubory, domény, TLS a routing požadavků. Backend za ním rozhoduje o uživateli, objednávce a datech.

Stručná definice

Software pro veřejný HTTP vstup, ne business logika aplikace.

Webový server podle domény a cesty vyhodnotí příchozí HTTP požadavek. CSS, JavaScript a obrázky může vrátit přímo z veřejného adresáře. Pro dynamický obsah obvykle předá request PHP-FPM přes FastCGI nebo jiné interní HTTP službě jako reverse proxy.

Webový server není fyzický počítač ani synonymum backendu. Konkrétní implementací může být nginx nebo Apache. Jeden server může obsluhovat více domén a může běžet v Dockeru i přímo na operačním systému.

Jaký problém řeší

Řídí HTTP provoz před aplikací

Webový server odděluje veřejný síťový vstup od aplikačního runtime, workerů a databází.

  • přijetí HTTP a HTTPS spojení pro web, administraci a API
  • doručení statických souborů se správným MIME typem
  • předání PHP requestů do PHP-FPM přes FastCGI
  • reverse proxy na interní HTTP aplikaci nebo API
  • domény, přesměrování, provozní logy, limity a základní cache

Praktický příklad

Veřejný vstup PHP aplikace přes nginx

Konfigurace má explicitní veřejný document root a aplikační požadavky vede do jednoho front controlleru. Tím nenabízí spuštění libovolného PHP souboru v projektu ani souborů nahraných uživatelem.

Ukázka není úplná produkční konfigurace. TLS nastavení, limity, health checky i důvěryhodné adresy proxy musí odpovídat konkrétní infrastruktuře a aplikace musí sama kontrolovat autentizaci a autorizaci.

server {
    listen 443 ssl;
    server_name shop.example.cz;
    root /var/www/shop/public;

    location /assets/ { try_files $uri =404; }
    location / { try_files $uri $uri/ /index.php?$query_string; }

    location = /index.php {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
        fastcgi_pass unix:/run/php/php-fpm.sock;
    }
}

Jak funguje

Od HTTP requestu k odpovědi

Textový diagram: klient → webový server → PHP-FPM nebo interní služba → aplikace → odpověď klientovi.

  1. Klient pošle request Prohlížeč nebo API klient osloví doménu, cestu a metodu přes HTTP nebo HTTPS.
  2. Server zvolí konfiguraci Podle hostitele a URL vybere virtual host či server block a vhodné pravidlo location.
  3. Statický nebo dynamický obsah Statické assety vrátí přímo; PHP předá FastCGI a interní HTTP službu může oslovit jako proxy.
  4. Aplikace rozhodne Backend vyhodnotí identitu, oprávnění, validaci, business pravidla a práci s daty.
  5. Server vrátí response Zapíše provozní informace a předá klientovi status, hlavičky a obsah odpovědi.

Důležité části

Soubory, směrování a důvěryhodná infrastruktura.

Webový server vytváří technickou hranici, ale nepřebírá význam dat aplikace.

Document root a MIME typy

Pouze explicitně veřejné soubory patří do document rootu. Konfigurace, zdrojový kód a citlivé uploady nemají být veřejně podatelné.

FastCGI a PHP-FPM

PHP-FPM není HTTP server. Webový server mu předá request přes FastCGI a PHP-FPM vykoná kód aplikace.

TLS a přesměrování

Server může terminovat TLS, vynutit HTTPS a přidat některé hlavičky. HTTPS ale nenahrazuje aplikační oprávnění.

Reverse proxy

Předání na upstream je jedna z rolí serveru. Proxy hlavičkám lze věřit jen z explicitně známého řetězce.

Logy a limity

Access a error logy, velikost požadavku a timeouty pomáhají provozu. Příliš dlouhý HTTP request není vhodný model pro import.

Vztah k podobným pojmům

Webový server, runtime a proxy nejsou totéž.

Konkrétní infrastruktura může spojit více rolí do jednoho produktu, význam pojmů se tím nemění.

nginx
Je konkrétní implementace webového serveru, která umí také reverse proxy, cache a load balancing.
PHP-FPM
Spravuje PHP procesy. HTTP typicky přijme nginx nebo jiný webový server.
Backend
Obsahuje aplikační pravidla a data; webový server je před ním síťovou a HTTP vrstvou.
Reverse proxy
Je role prostředníka. Webový server ji může vykonávat, ale ne každý webový server ji musí používat.

Výhody a omezení

Správná HTTP hranice neřeší celý bezpečnostní návrh.

Přínosy

  • účinné doručení statických souborů bez spuštění aplikace
  • sjednocené domény, TLS, přesměrování a provozní logy
  • oddělení veřejného vstupu od PHP runtime a databáze
  • možnost obsloužit více aplikací za jedním veřejným vstupem

Časté chyby

  • zpřístupnit veřejně PHP-FPM, databázi nebo interní worker
  • spouštět každý soubor s příponou PHP včetně uploadů
  • bez kontroly důvěřovat X-Forwarded-* hlavičkám od klienta
  • přenést autorizaci či pravidla objednávky do konfigurace webového serveru

Kdy dává smysl

Pro každý HTTP vstup, rozsah konfigurace se liší.

Webový server je přirozený vstup pro PHP aplikaci, API i server-renderovaný web. Jednoduchý projekt může mít jen několik pravidel pro document root a PHP-FPM; větší provoz potřebuje také dohled, limity, proxy topologii a bezpečné TLS.

Není však vhodné dělat z HTTP requestu dlouhý worker. Importy, exporty nebo rozsáhlé synchronizace je lepší přijmout jako úlohu a zpracovat mimo omezený requestový pool.

Na co myslet

Veřejná konfigurace má být úzká a ověřená.

Každá hranice mezi klientem, proxy a aplikací potřebuje výslovně určenou důvěru a měřitelné limity.

  • držet document root mimo zdrojový kód a secrets
  • předávat do PHP jen potřebné FastCGI parametry
  • nastavit TLS, redirect na HTTPS a security hlavičky v souladu s aplikací
  • správně vymezit důvěryhodné proxy a forwardované hlavičky
  • sledovat chybovost, timeouty, velikosti requestů a statusy odpovědí

Časté otázky

Webový server bez častých záměn

Je nginx webový server?

Ano. Umí také reverse proxy, cache a load balancing, ale pojem webový server je obecnější.

Je PHP-FPM webový server?

Ne. Spravuje PHP FastCGI procesy; HTTP přijímá typicky nginx nebo jiný webový server.

Řeší webový server oprávnění uživatele?

Může přidat technickou ochranu, ale přístup k objednávce nebo akci API musí rozhodovat backend podle aplikace a dat.

Je reverse proxy totéž co webový server?

Ne. Reverse proxy je role předávání requestů jinému serveru; webový server tuto roli může, ale nemusí plnit.

Jak řeším provoz backendu

Veřejný HTTP vstup odděluji od aplikace, workerů a dat.

Při návrhu PHP aplikací propojuji webový server, runtime, databázi a integrační služby tak, aby šel provoz měřit a bezpečně rozvíjet.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.