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.
- Klient pošle request Prohlížeč nebo API klient osloví doménu, cestu a metodu přes HTTP nebo HTTPS.
- Server zvolí konfiguraci Podle hostitele a URL vybere virtual host či server block a vhodné pravidlo location.
- Statický nebo dynamický obsah Statické assety vrátí přímo; PHP předá FastCGI a interní HTTP službu může oslovit jako proxy.
- Aplikace rozhodne Backend vyhodnotí identitu, oprávnění, validaci, business pravidla a práci s daty.
- 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.