Proč optimalizovat výkon webového serveru
Výkon webového serveru ovlivňuje uživatelskou zkušenost, SEO, provozní náklady i konverze. Optimalizace zahrnuje architekturu (reverse proxy, CDN), konfiguraci webserveru (Nginx/Apache/Caddy), operační systém a síťové zásobníky, TLS, cachování a kompresi, práci se statickými soubory i aplikační vrstvou (PHP-FPM, Node.js, JVM). Cílem je minimalizovat latenci, maximalizovat propustnost a stabilitu při zachování bezpečnosti.
Cílové metriky a měření
- Latence: p50/p90/p95/p99 doba odezvy; sledujte zvlášť TTFB.
- Propustnost: požadavky za sekundu (RPS), data za sekundu.
- Chybovost: podíl 4xx/5xx kódů, saturace front.
- Využití zdrojů: CPU, paměť, I/O, síť, otevřené deskriptory.
- SLA/SLO: cílové hodnoty a rozpočty chyb (error budgets).
Pro testování použijte nástroje jako wrk, k6, ab, vegeta. Měřte za reverzní proxy i na aplikační vrstvě, oddělte scénáře warm cache a cold cache.
Volba a role webového serveru
- Nginx: event-driven server, vhodný pro statický obsah, reverzní proxy a TLS terminaci; nízká režie na připojení.
- Apache: modulární architektura a kompatibilita; pro výkon preferujte MPM event s ProxyPass před aplikační vrstvou.
- Caddy: automatický TLS, jednoduchá konfigurace, kvalitní HTTP/2 a HTTP/3 stack.
Oddělte edge (TLS, komprese, caching) od backendu (aplikace). U dynamického obsahu používejte reverzní proxy (Nginx/Caddy/Varnish) před aplikačním serverem (PHP-FPM, uWSGI/Gunicorn, Node.js, Java).
HTTP/2 a HTTP/3 (QUIC)
- HTTP/2: multiplexing, komprese hlaviček (HPACK), server push je dnes spíše nahrazován preload linkami; aktivujte
http2na TLS virtuálních hostech. - HTTP/3/QUIC: běží nad UDP, odolnější proti ztrátám paketů, nižší latence při migraci připojení; povolte pouze tam, kde je stabilní UDP a správně nastavená firewall pravidla.
- Optimalizace: využívejte
alt-svchlavičky, testujte p95 latenci na mobilních sítích.
TLS 1.3, resumption a OCSP stapling
- TLS 1.3 snižuje počet RTT v handshaku, podporuje 0-RTT (pozor na opakovatelnost požadavků).
- Resumption: session tickets/ID s rozumnou expirací; snižuje zátěž CPU.
- OCSP stapling: server přikládá status certifikátu; zkracuje TTFB.
- Curve a šifry: preferujte x25519 a AES-GCM/CHACHA20-POLY1305.
Keep-Alive, connection pooling a fronty
Zapněte HTTP Keep-Alive s vyváženou dobou trvání a limitem požadavků na jedno spojení. Reverzní proxy drží pooly připojení k backendům: nastavte max_conns, keepalive_requests a keepalive_timeout tak, aby nedocházelo k thrashingu. Sledujte fronty (upstream queue) a nastavte limity na backlog, aby nedošlo k saturaci SYN-flood útokem.
Kompresní strategie: gzip a Brotli
- Výběr: Brotli pro statické textové soubory (úroveň 4–6 pro on-the-fly kompresi; 9–11 pro prekompresi), gzip pro dynamické odpovědi (úroveň 3–5).
- Rozsah: komprimujte
text/html,text/css,application/javascript,application/json,image/svg+xml; nekomprimujte již komprimované formáty (JPEG, PNG, WebP, AVIF, ZIP). - Vary: nastavte
Vary: Accept-Encodingpro správnou kompatibilitu s CDN a edge servery.
HTTP cache: Cache-Control, ETag a preloading
- Cache-Control: pro statická aktiva používejte
public, max-age=31536000, immutablespolu s content hashingem v názvech souborů. - ETag/Last-Modified: u dynamického obsahu implementujte podmíněné odpovědi; minimalizujte výpočet ETag (např. size-timestamp místo úplného hashe) u velkých souborů.
- Preload:
<link rel="preload">pro kritická aktiva;preconnectadns-prefetchpro externí zdroje. - Surrogate-Control: s CDN umožňuje rozdílné TTL na edge a klientské straně.
CDN a edge cachování
CDN s anycastem minimalizuje latenci a šetří zdroje originálního serveru. Využijte varianty podle hlaviček (Vary), cache keys, surrogate keys pro invalidaci skupin, ochranu proti DDoS a TLS terminaci co nejblíže uživateli. U statického obsahu umožněte kompletní offload doručení na CDN.
Statický obsah a obrázky
- Formáty: preferujte WebP a AVIF; spravujte
Acceptnegotiation a fallbacky. - Rozměry a lazy-load: generujte více velikostí na straně serveru, používejte atributy
srcsetaloading="lazy". - Správa hlaviček: dlouhá cache pro verzované soubory, krátká pro neverzované.
Varnish / reverse proxy cache pro dynamiku
U publikačních CMS nasazujte Varnish nebo Nginx microcache (100–500 ms) ke snížení zátěže backendu. Řešte invalidation přes BAN/PURGE, grace mode při výpadku backendu a ESI fragmentaci složitých stránek. Dbejte na Vary (cookie, jazyk, zařízení) a minimalizujte zbytečné Set-Cookie u cacheovatelných odpovědí.
Optimalizace aplikační vrstvy
- PHP-FPM: správná velikost poolu (
pm = dynamicčiondemand),pm.max_childrennastavte dle dostupné RAM a konkurence, zapněte OPcache s persistencí a preloadingem. - Node.js: provozujte více procesů (cluster, PM2), udržujte neblokující I/O, omezte synchronní operace.
- JVM: nastavte velikost heapu, použijte G1 nebo ZGC, provádějte warmup; profilujte největší hotspoty.
- DB připojení: connection pooling (PgBouncer/ProxySQL), optimalizace dotazů, cachování objektů (Redis, Memcached).
- Šablony a serializace: minimalizujte práci na jeden požadavek, používejte připravené odpovědi a streamování JSON tam, kde je to vhodné.
Kernel, síť a I/O ladění
- Deskriptory: zvyšte limity (
ulimit -n),fs.file-max. - Backlog a fronty: nastavte
net.core.somaxconn,net.ipv4.tcp_max_syn_backlog, zapněte SYN cookies pouze při DoS útocích. - TCP: aktivujte
tcp_fastopen, používejtetcp_tw_reuseopatrně, nastavtetcp_fin_timeout; vypněte Nagleův algoritmus (TCP_NODELAY) pro snížení latence. - sendfile/aio: povolte
sendfileaaiopro statický obsah; kontrolujte kompatibilitu s TLS offloadem. - Reuseport: u Nginx a Caddy aktivujte
reuseportpro rovnoměrné rozložení příchozích spojení mezi pracovní procesy. - Storage: používejte SSD/NVMe disky, vhodné I/O plánovače a noatime mounty pro statický obsah.
Konfigurace Nginx: praktické rady
- Workers: použijte
worker_processes auto,worker_connectionsnastavte podle dostupné paměti a zátěže. - Buffery: optimalizujte
client_body_buffer_size,proxy_buffer_size,proxy_busy_buffers_size. - Time-outy: nastavte
client_body_timeout,send_timeout,proxy_read_timeout– zabraňují visícím spojům. - Cache: definujte
proxy_cache_paths keys_zone, použijteproxy_cache_bypasspro přihlášené uživatele. - Bezpečnost: omezte hlavičky, velikost těla, aplikujte rate limiting (
limit_req) – chrání výkon serveru.
Apache: výkonové tipy
- MPM event místo preforku; statický obsah obsluhujte přes
mod_http2a reverzní proxy. - mod_proxy_fcgi pro PHP-FPM; vypínejte nepotřebné moduly.
- Cache: používejte
mod_cachescache_socachepro krátké TTL; HLAVNĚ správné hlavičky Cache-Control.
Konfigurace Caddy: stručně
- Auto TLS a OCSP stapling implicitně; aktivujte
encode gzip zstd(Zstandard je vhodný pro on-the-fly kompresi). - Reverse proxy s health checky a load balancingem.
Balancování zátěže a vysoká dostupnost
- L7 load balancer (HAProxy, Nginx, Envoy) pro sticky sessions přes cookies, health-checky a outlier detection.
- L4 load balancer (IPVS/keepalived) pro jednoduché TCP/UDP rozložení s nízkou režii.
- Failover: anycast IP, BGP nebo DNS health-based směrování (s rozumnými TTL).
DNS a domény: vliv na výkon
- TTL: krátké TTL u dynamických záznamů (A/AAAA/CNAME) pro řízený failover; delší TTL pro stabilní CDN edge.
- Anycast resolverů a autoritativních serverů; aktivní monitoring a RUM pro latence resolverů.
- DNSSEC: bezpečnostní benefit, minimální dopad na latenci při správné konfiguraci.
Observabilita: logy, metriky, trasování
Implementujte metriky (Prometheus/OpenMetrics), distribuované trasování (OpenTelemetry) a korelaci s logy. Sledujte saturaci workerů, délky front, chování garbage collectoru, hit-rate cache a podíl cache MISS. Nastavte rozumné alerty na p95 latenci, chybovost 5xx a vyčerpání file descriptorů.
Bezpečnostní opatření podporující výkon
- Rate limiting a WAF chrání před zneužitím a snižují nežádoucí šum.
- Bot management a challenge mechanismy redukují zbytečné požadavky.
- HSTS a moderní TLS snižují renegociace a přesměrování.
Specifika pro Kubernetes a kontejnery
- Ingress (nginx/contour/traefik/envoy) s keep-alive a bufferingem; Pod Topology Spread pro vyváženou zátěž.
- Resource requests/limits tak, aby nedocházelo k CPU throttlingu a OOM killům.
- Sidecar pro kompresi a caching pouze pokud přináší benefit; zbytečné sidecary zvyšují latenci.
WordPress/typické CMS: rychlá výhra
- OPcache a object cache (Redis) pro snížení dotazů do databáze.
- Page cache na reverzní proxy, minifikace a bundling statických zdrojů, kritické CSS inlinovat pouze uvážlivě.
- Plugin hygiena: méně je více; sledujte pomalé hooky a dotazy.
Proces optimalizace: postup krok za krokem
- Definujte SLO (např. p95 < 200 ms pro statický obsah, < 500 ms pro dynamický).
- Změřte výchozí stav (profilování, RUM, syntetické testy).
- Aktivujte HTTP/2, TLS 1.3, kompresi a cachování statických zdrojů.
- Zaveďte reverse proxy cache/microcache, optimalizujte keep-alive a pooling.
- Odstraňte blokující části aplikace, optimalizujte databázi a nasaďte Redis.
- Nasazením CDN snižte globální latenci.
- Doladění



























