Community
94
HostiServer
2026-01-23 13:35:00

Nginx vs Apache v roce 2026: srovnání, konfigurace, jak vybrat

⏱️ Doba čtení: ~14 minut | 📅 Publikováno:23. ledna 2026

Nginx vs Apache v roce 2026: jaký je skutečný rozdíl?

Pokud čtete další článek „Nginx vs Apache" a očekáváte jednoznačnou odpověď — nebude. Ale bude něco užitečnějšího: reálná data z produkce, konkrétní konfigurace a jasná kritéria výběru.

Začněme faktem: 70 % klientů Hostiserver používá Nginx (včetně konfigurací s Nginx jako Reverse Proxy). Čistý Apache se vyskytuje převážně na legacy projektech a specifickém sdíleném hostingu. Trend posledních let je jednoznačný — Nginx + PHP-FPM vytlačuje Apache i tam, kde byl kdysi standardem.

To ale neznamená, že Apache je mrtvý. V některých scénářích je stále nenahraditelný — zejména tam, kde je potřeba dynamická konfigurace přes .htaccess nebo specifické moduly. Proto je důležité pochopit silné stránky obou serverů.

Tento průvodce vám pomůže pochopit, kdy co použít — bez marketingových frází a s konkrétními příklady z reálných projektů.

Vizualizace architektury: Náročné procesy Apache vs. rychlý událostmi řízený model Nginx

Kdo co používá v praxi

Podle naší statistiky vypadá rozdělení projektů takto:

Apache se volí pro:

  • Legacy projekty s velkým množstvím individuálních úprav v .htaccess
  • Bitrix, starší verze Magenta a další systémy kriticky závislé na .htaccess
  • Sdílený hosting, kde je potřeba izolace uživatelů

Nginx se volí pro:

  • Vysoce zatížené mediální portály
  • API pro mobilní aplikace
  • Moderní SPA na React/Vue/Angular
  • WordPress a WooCommerce
  • eCommerce platformy (PrestaShop, moderní Magento)

Architektura: proč je Nginx rychlejší

Rozdíl mezi Nginx a Apache není v „kvalitě kódu" nebo „modernosti". Rozdíl je v architektonickém přístupu ke zpracování spojení. A tento rozdíl má praktické důsledky, které pocítíte pod zátěží.

Apache: jeden proces — jedno spojení

Apache se narodil v éře, kdy server obsluhoval desítky současných uživatelů. Jeho klasický model (prefork) funguje jednoduše: pro každé spojení — samostatný proces. Je to spolehlivé, snadno se debuguje, ale špatně škáluje.

Představte si: 1000 současných spojení = 1000 procesů. Každý proces s mod_php váží 50–100 MB. Počítejme: 50–100 GB RAM jen na webový server. Při náporu provozu (nebo DDoS) server padá, protože vyčerpá limit MaxRequestWorkers.

Tohle není teoretický problém — je to #1 na seznamu problémů našich klientů s Apache: vyčerpání limitu MaxClients/MaxRequestWorkers. Web prostě „leží" při náporu botů nebo náhlém zvýšení provozu.

ℹ️ MPM Event: V roce 2026 má Apache modul MPM Event, který pracuje efektivněji — jedno vlákno může obsluhovat více keep-alive spojení. To výrazně zlepšilo situaci, ale architektonicky Apache stále zaostává za Nginx. MPM Event je „záplata" na staré architektuře, ne nová architektura.

Nginx: jeden proces — tisíce spojení

Nginx je postaven na event-driven architektuře. Jeden worker proces zpracovává tisíce spojení současně pomocí neblokujícího I/O. Žádné přepínání kontextu mezi procesy, žádná režie na vytváření nových vláken.

Výsledek: Nginx se 4 worker procesy (podle počtu jader CPU) může obsluhovat stejně provozu jako Apache se stovkami procesů — a spotřebovat 10× méně RAM.

To vysvětluje, proč při náhlé zátěži (DDoS nebo virální provoz) Apache padá mnohem rychleji. Nginx obvykle drží — může vracet 504 Gateway Timeout, pokud backend (PHP) nestíhá, ale samotný webový server pokračuje v práci a přijímá spojení.

Parametr Apache (prefork) Apache (event) Nginx
Model zpracování Proces na spojení Vlákno na spojení Event-driven
RAM na 1000 spojení ~50–100 GB ~5–10 GB ~50–100 MB
Chování pod DDoS Padá rychle Drží lépe Stabilní
Statický obsah Pomalu Středně Velmi rychle
Dynamická konfigurace (.htaccess) Plná podpora Plná podpora Nepodporováno

Problém C10k

V roce 2000 vznikl takzvaný „problém C10k" — jak obsluhovat 10 000 současných spojení. Apache s modelem „proces na spojení" to nemohl efektivně zvládnout. Nginx byl vytvořen právě pro řešení tohoto problému.

V roce 2026 se Apache zlepšil díky MPM Event, ale stále spotřebovává více paměti na každé nové spojení ve srovnání s Nginx. Pokud váš projekt očekává významné zátěže — Nginx zůstává lepší volbou.

Reálný výkon: co ukazují testy

Syntetické benchmarky jsou jedno, reálná produkce je něco jiného. Zde je to, co vidíme na projektech klientů.

WordPress: Nginx je o 15–30 % rychlejší

Za identických podmínek (stejný server, stejná verze PHP-FPM) Nginx + PHP-FPM ukazuje lepší TTFB (Time to First Byte) o 15–30 %. Při paralelních požadavcích je rozdíl ještě větší — Apache začíná „dusit" dříve.

Pro WooCommerce s velkými katalogy je kritické nastavit fastcgi_buffer_size, aby velké stránky produktů nevytvářely dočasné soubory na disku. To může přinést dalších 10–20 % rychlosti na stránkách s mnoha produkty.

Statický obsah: Nginx je bezkonkurenční

Doručování obrázků, CSS, JS — to je to, pro co byl Nginx stvořen. Dělá to s minimální zátěží CPU díky sendfile() a nulovému kopírování dat. Apache prohrává i s mod_cache.

Doporučená nastavení pro statiku v Nginx:

  • Maximální expires pro statické soubory
  • Vypnutí logování pro statiku (snižuje I/O)
  • sendfile on — použití systémového volání sendfile
  • tcp_nopush on — optimalizace TCP paketů

Pod zátěží: rozdíl je kritický

Při náhlém náporu provozu (DDoS, virální obsah, Reddit hug of death) Apache padá rychleji. Nginx obvykle drží — může vracet 504 Gateway Timeout, pokud backend (PHP) nestíhá, ale samotný webový server pokračuje v práci.

💡 Success Story: Mediální zdroj migroval z Apache na Nginx + FastCGI Cache. Výsledek: snížení počtu serverů ze 4 na 1 při stejné zátěži. Úspora na infrastruktuře — přes 500 $/měsíc. Caching anonymních uživatelů umožnil zvládnout špičky provozu, které dříve „položily" celou infrastrukturu.

Typické problémy s výkonem

Top 3 problémy Apache:

  1. Vyčerpání limitu MaxClients/MaxRequestWorkers (web „leží" při náporu botů)
  2. Nadměrná spotřeba RAM přes mod_php (každý proces 50–100 MB)
  3. Složité konflikty v .htaccess, které se těžko debugují

Top 3 problémy Nginx:

  1. Chyby konfigurace fastcgi_params (502 Bad Gateway)
  2. Problémy s oprávněními k soketům PHP-FPM
  3. Nesprávné nastavení přesměrování (smyčky přesměrování)

Doporučené konfigurace Nginx

Teorie je dobrá, ale potřebujete fungující konfigurace. Zde je to, co používáme v produkci.

WordPress + FastCGI Cache

Tato konfigurace zvládne tisíce požadavků za sekundu. Caching anonymních uživatelů je must-have pro jakýkoli WordPress web. Přihlášení uživatelé a POST požadavky automaticky obcházejí cache.

# Definice zóny cache v http bloku
fastcgi_cache_path /var/cache/nginx/wordpress 
    levels=1:2 
    keys_zone=WP_CACHE:100m 
    inactive=60m;
server {
    listen 443 quic reuseport; # HTTP/3
    listen 443 ssl;
    server_name example.com;
    # SSL nastavení
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.3;
    
    # Oznámení HTTP/3
    add_header Alt-Svc 'h3=":443"; ma=86400';
    root /var/www/wordpress;
    index index.php;
    # Logika obcházení cache
    set $skip_cache 0;
    
    # POST požadavky necachujeme
    if ($request_method = POST) { 
        set $skip_cache 1; 
    }
    
    # Požadavky s query string necachujeme
    if ($query_string != "") { 
        set $skip_cache 1; 
    }
    
    # Přihlášené uživatele necachujeme
    if ($http_cookie ~* "comment_author|wordpress_logged_in|wp-postpass") {
        set $skip_cache 1;
    }
    # Statika s dlouhým cachingem
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        access_log off;
    }
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        
        # Caching
        fastcgi_cache WP_CACHE;
        fastcgi_cache_valid 200 301 302 1h;
        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;
        
        # Debug hlavička (ukazuje HIT/MISS)
        add_header X-FastCGI-Cache $upstream_cache_status;
    }
}

Reverse Proxy pro Node.js / Python / Go

Ideální pro moderní aplikace na NestJS, FastAPI, Django, Gin. Zahrnuje podporu WebSocketů a předávání reálných IP adres.

upstream backend {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001 backup;
    keepalive 32;
}
server {
    listen 443 ssl http2;
    server_name api.example.com;
    ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        
        # WebSocket podpora
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        # Předávání reálných IP
        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;
        
        # Timeouty
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
        
        # Bufferování
        proxy_buffering on;
        proxy_buffer_size 4k;
        proxy_buffers 8 4k;
    }
    
    # Health check endpoint
    location /health {
        proxy_pass http://backend;
        access_log off;
    }
}

Optimalizace pro statiku

# Globální nastavení v http bloku
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# Gzip komprese
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript 
           text/xml application/xml application/xml+rss text/javascript
           image/svg+xml;
# Statika
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
    access_log off;
    log_not_found off;
}

Doporučené konfigurace Apache

Pokud potřebujete Apache — používejte ho správně. Hlavní pravidlo: pouze MPM Event + PHP-FPM. mod_php je anachronismus, který patří do roku 2010.

MPM Event — zlatý standard 2026

MPM Event je nejbližší modelu Nginx a efektivně pracuje s keep-alive spojeními. Zde je optimální konfigurace:

# /etc/apache2/mods-enabled/mpm_event.conf
<IfModule mpm_event_module>
    # Počet procesů při startu
    StartServers             3
    
    # Minimum volných vláken
    MinSpareThreads          25
    
    # Maximum volných vláken
    MaxSpareThreads          75
    
    # Maximum vláken na proces
    ThreadLimit              64
    ThreadsPerChild          25
    
    # Maximum současných požadavků
    # Počítejte: RAM / ~50MB na worker
    MaxRequestWorkers        400
    
    # 0 = procesy se nerestartují
    MaxConnectionsPerChild   0
</IfModule>

⚠️ Důležité: Hodnotu MaxRequestWorkers je třeba vypočítat pro vaši RAM. Vzorec: (Dostupná RAM - RAM pro systém a databázi) / ~50MB. Pokud nastavíte příliš mnoho — server začne swapovat a vše bude ještě horší.

Připojení PHP-FPM

Zapomeňte na mod_php. PHP-FPM umožňuje Apache procesům zůstat lehkými, protože PHP běží v samostatných procesech.

# Povolení potřebných modulů
# a2enmod proxy_fcgi setenvif
# a2enconf php8.3-fpm
<VirtualHost *:443>
    ServerName example.com
    DocumentRoot /var/www/html
    
    # SSL
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    # PHP přes FPM
    <FilesMatch "\.php$">
        SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
    </FilesMatch>
    <Directory /var/www/html>
        AllowOverride All
        Require all granted
        
        # Zákaz spouštění PHP v uploads
        <Directory /var/www/html/wp-content/uploads>
            <FilesMatch "\.php$">
                Require all denied
            </FilesMatch>
        </Directory>
    </Directory>
    
    # Komprese
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/css 
        AddOutputFilterByType DEFLATE application/javascript application/json
    </IfModule>
    
    # Caching statiky
    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresByType image/jpg "access plus 1 year"
        ExpiresByType image/jpeg "access plus 1 year"
        ExpiresByType image/png "access plus 1 year"
        ExpiresByType image/gif "access plus 1 year"
        ExpiresByType text/css "access plus 1 month"
        ExpiresByType application/javascript "access plus 1 month"
    </IfModule>
</VirtualHost>

Proč ne mod_php?

mod_php vkládá interpret PHP do každého Apache procesu. To znamená:

  • Každý proces váží 50–100 MB místo 5–10 MB
  • I když Apache doručuje obrázek — proces stále drží PHP v paměti
  • Při 100 současných spojeních — 5–10 GB RAM jen na Apache

S PHP-FPM jsou Apache procesy lehké a PHP běží samostatně — pouze když je potřeba.

HTTP/2, HTTP/3 a QUIC

HTTP/2: výchozí standard

V roce 2026 je HTTP/2 baseline. Bez něj je moderní web nemožný. Co HTTP/2 poskytuje:

  • Multiplexing — více požadavků přes jedno spojení
  • Komprese hlaviček — HPACK algoritmus snižuje režii
  • Server Push — server může proaktivně posílat zdroje
  • Prioritizace — důležitější zdroje se načítají první

Oba servery podporují HTTP/2, ale Nginx to dělá efektivněji díky své architektuře.

HTTP/3 (QUIC): budoucnost je tady

Vizualizace rychlosti protokolu HTTP/3 QUIC v porovnání s HTTP/2

HTTP/3 je založen na protokolu QUIC (UDP místo TCP). V roce 2026 je to již stabilní technologie, ne experiment.

Výhody HTTP/3:

  • Rychlejší navázání spojení — 0-RTT možný při opakovaných návštěvách
  • Lepší práce při ztrátě paketů — žádný head-of-line blocking
  • Vestavěné šifrování — TLS 1.3 integrován do protokolu
  • Migrace spojení — při změně sítě (WiFi → LTE) spojení se nepřeruší

V Nginx je HTTP/3 podporován přes modul ngx_http_v3_module a je připraven pro produkci.

⚠️ Úskalí: HTTP/3 vyžaduje otevřený UDP port 443. Některé firemní firewally stále blokují UDP, proto vždy nastavte fallback na HTTP/2. To se děje automaticky přes hlavičku Alt-Svc — prohlížeč se nejprve připojí přes HTTP/2, obdrží hlavičku a zkusí HTTP/3.

# Nginx s HTTP/3
server {
    # HTTP/3 na QUIC
    listen 443 quic reuseport;
    
    # Fallback na HTTP/2
    listen 443 ssl;
    http2 on;
    
    # Pouze TLS 1.3 pro HTTP/3
    ssl_protocols TLSv1.2 TLSv1.3;
    
    # Oznámení podpory HTTP/3
    add_header Alt-Svc 'h3=":443"; ma=86400';
    
    # ECDSA certifikát (rychlejší než RSA)
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}

SSL/TLS doporučení 2026

  • TLS 1.3 — jediná doporučená verze (TLS 1.2 pro legacy)
  • ECDSA certifikáty — rychlejší než RSA, používejte P-256
  • OCSP Stapling — snižuje čas handshake
  • Session Tickets — pro rychlejší obnovení relací

Bezpečnost: typické zranitelnosti a hardening

Typické chyby v konfiguraci

Většina průniků není kvůli zranitelnostem v kódu webového serveru, ale kvůli nesprávné konfiguraci. Zde je to, co pravidelně vidíme:

Apache:

  • Options +Indexes — umožňuje zobrazit seznam souborů v adresáři. Útočník může najít záložní soubory, konfigurace, dočasné soubory
  • Zastaralé CGI skripty se známými zranitelnostmi
  • Vystavené .env, .git, záložní soubory (.sql, .bak)
  • Zastaralé moduly s CVE

Nginx:

  • Nesprávný location ~ \.php$ — může spustit PHP kód v nahraném souboru (např. image.php.jpg)
  • Chybějící zákaz přístupu ke skrytým souborům (.git, .env)
  • Vystavená verze serveru (server_tokens on) — usnadňuje hledání CVE

🚨 Reálný příklad: Průniky přes vystavené .env soubory jsou jedním z nejčastějších problémů. Soubor .env obsahuje hesla k databázi, API klíče, tajemství. Pokud je dostupný přes web — je to úplná kompromitace.

Security Headers

Minimální sada bezpečnostních hlaviček pro rok 2026:

# Nginx Security Headers
# Zabraňuje MIME-type sniffing
add_header X-Content-Type-Options "nosniff" always;
# Ochrana před clickjacking
add_header X-Frame-Options "SAMEORIGIN" always;
# Pouze HTTPS (povolte po testování!)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# XSS ochrana (pro starší prohlížeče)
add_header X-XSS-Protection "1; mode=block" always;
# Referrer Policy
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# Content Security Policy (přizpůsobte pro svůj web!)
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';" always;

ℹ️ CSP: Content-Security-Policy je nejsložitější, ale nejdůležitější hlavička. Zabraňuje XSS útokům, ale vyžaduje pečlivou konfiguraci pro konkrétní web. Začněte s Content-Security-Policy-Report-Only pro testování.

Nginx Hardening

# Skrýt verzi serveru
server_tokens off;
# Zákaz přístupu ke skrytým souborům
location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
}
# Zákaz přístupu k citlivým souborům
location ~* \.(env|git|sql|bak|old|backup|log|ini|conf)$ {
    deny all;
}
# Omezení HTTP metod
location / {
    limit_except GET HEAD POST { 
        deny all; 
    }
}
# Ochrana před Slowloris
client_body_timeout 10s;
client_header_timeout 10s;
keepalive_timeout 65s;
send_timeout 10s;
# Omezení velikosti požadavků
client_max_body_size 10m;
client_body_buffer_size 128k;

Rate Limiting

Pro ochranu před Layer 7 DDoS má Nginx vestavěné nástroje — a fungují mnohem lépe než Apache mod_evasive.

# Definice zón rate limiting
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
limit_req_zone $binary_remote_addr zone=api:10m rate=100r/s;
limit_conn_zone $binary_remote_addr zone=conn:10m;
# Aplikace na login
location /wp-login.php {
    limit_req zone=login burst=3 nodelay;
    limit_conn conn 5;
    
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
# Aplikace na API
location /api/ {
    limit_req zone=api burst=50 nodelay;
    
    proxy_pass http://backend;
}

Apache: mod_evasive funguje hůře — pro seriózní ochranu je lepší použít Cloudflare, Fail2Ban nebo iptables/ipset na základě analýzy logů.

Co vybrat: Decision Matrix 2026

Místo abstraktních rad — konkrétní tabulka výběru. Najděte svůj scénář:

Scénář Doporučení Proč
Landing / SPA Nginx Rychlá statika, minimální CPU
WordPress Nginx + FastCGI Cache Caching, +15–30 % rychlost
Legacy: Bitrix, Magento Apache MPM Event Potřebuje .htaccess
API servery Nginx Reverse Proxy SSL, buffery, WebSockets
High-load / DDoS Nginx Zvládne tisíce spojení
Sdílený hosting CloudLinux + Apache Izolace, .htaccess
Kubernetes Nginx Ingress K8s standard
Lokální vývoj Docker + Nginx Stejně jako produkce
Mikroslužby Nginx / Envoy Mesh, load balancing

Kdy má Nginx před Apache smysl?

Pokud potřebujete .htaccess pro vývojáře, ale chcete chránit server před pomalými spojeními (Slowloris útoky) — dejte Nginx jako Reverse Proxy před Apache. Nginx bufferuje pomalé klienty a předává Apache pouze připravené požadavky.

Tato konfigurace také umožňuje:

  • Cachovat statiku na Nginx (rychleji)
  • SSL terminaci na Nginx (menší zátěž Apache)
  • Rate limiting na Nginx (efektivnější)
  • Ponechat .htaccess pro specifická pravidla

🚨 Chyba „Double Caching": Pokud dáváte Nginx před Apache — nepovolujte caching na obou úrovních. To vede k problémům s aktualizací obsahu a debugování se stává noční můrou. Cachujte pouze na Nginx.

Časté chyby: co vidíme u klientů

Tyto chyby se pravidelně objevují při konzultacích — neopakujte je:

❌ Chyba #1: Apache „ze zvyku"

Co se děje: Klient instaluje Apache na nový projekt prostě proto, že „vždycky to tak dělal" nebo „tak to bylo v tutoriálu".

Problém: Pro moderní SPA, API nebo WordPress bez složitých .htaccess pravidel Apache jen překáží — spotřebovává více zdrojů bez jakýchkoli výhod.

Řešení: Před výběrem webového serveru se zeptejte sami sebe: „Opravdu potřebuji .htaccess?" Pokud ne — Nginx. Pokud si nejste jisti — taky Nginx, protože konvertovat nginx.conf na .htaccess je snazší než naopak.

❌ Chyba #2: mod_php místo PHP-FPM

Co se děje: Apache s mod_php — každý proces váží 50–100 MB, i když doručuje statický obrázek.

Problém: Při 100 současných spojeních — 5–10 GB RAM jen na Apache. Při 200 — už 10–20 GB. Server rychle vyčerpá paměť.

Řešení: Pouze PHP-FPM. Vždy. mod_php je anachronismus, který patří do roku 2010. Nastavení zabere 5 minut, úspora zdrojů je dramatická.

❌ Chyba #3: Vyčerpání MaxRequestWorkers

Co se děje: Web „leží" při náporu provozu, v logu — „server reached MaxRequestWorkers setting".

Problém: Apache nemůže přijmout nová spojení, protože všechny sloty jsou obsazené. Ani legitimní uživatelé nemohou na web.

Řešení:

  1. Zkontrolujte, zda používáte MPM Event (ne prefork)
  2. Zkontrolujte, zda používáte PHP-FPM (ne mod_php)
  3. Vypočítejte MaxRequestWorkers pro vaši RAM
  4. Nebo dejte Nginx před Apache jako buffer
  5. Nebo migrujte na Nginx kompletně
❌ Chyba #4: 502 Bad Gateway v Nginx

Co se děje: Nginx vrací 502, i když PHP-FPM zdánlivě běží.

Příčiny:

  • Špatná cesta k soketu ve fastcgi_pass
  • Problémy s oprávněními soketu (www-data vs nginx)
  • PHP-FPM přetížen nebo spadl
  • Nesprávné fastcgi_params

Diagnostika:

# Zkontrolovat soket
ls -la /run/php/php8.3-fpm.sock
# Zkontrolovat stav PHP-FPM
systemctl status php8.3-fpm
# Zkontrolovat logy Nginx
tail -f /var/log/nginx/error.log
# Zkontrolovat logy PHP-FPM
tail -f /var/log/php8.3-fpm.log
❌ Chyba #5: Smyčky přesměrování

Co se děje: Prohlížeč ukazuje „ERR_TOO_MANY_REDIRECTS".

Příčina: Nginx přesměrovává HTTP→HTTPS a za ním load balancer nebo Cloudflare také přesměrovává — vzniká nekonečná smyčka.

Řešení: Kontrolujte hlavičku X-Forwarded-Proto před přesměrováním:

# Správné přesměrování za load balancerem
if ($http_x_forwarded_proto = "http") {
    return 301 https://$server_name$request_uri;
}
# NEBO použijte map
map $http_x_forwarded_proto $redirect_https {
    default 0;
    http 1;
}
server {
    if ($redirect_https) {
        return 301 https://$server_name$request_uri;
    }
}
❌ Chyba #6: Double Caching

Co se děje: Nginx před Apache, caching povolen na obou úrovních.

Problém: Obsah se cachuje dvakrát, těžko pochopíte odkud data přicházejí, problémy s invalidací, debugování se stává noční můrou.

Řešení: Cachujte pouze na jedné úrovni — nejlépe Nginx (je efektivnější). Na Apache kompletně vypněte mod_cache.

Monitoring a diagnostika

Nakonfigurovaný webový server je polovina úspěchu. Potřebujete také vidět, co se s ním děje.

➤ Klíčové metriky Nginx

Co monitorovat v první řadě:

  • Active connections — kolik spojení je právě aktivních
  • Requests per second (RPS) — zátěž serveru
  • Kódy odpovědí — zejména 4xx a 5xx
  • Request time — jak dlouho trvá zpracování požadavku
  • Upstream response time — jak dlouho čekáme na odpověď backendu

Doporučujeme nginx-vts-exporter + Grafana — to poskytuje detailní statistiky pro každý virtuální host.

➤ JSON formát logů

Doporučujeme JSON formát pro logy. To umožňuje okamžité indexování v ELK (Elasticsearch, Logstash, Kibana) nebo Grafana Loki.

# Nginx JSON log format
log_format json_combined escape=json '{'
    '"time_local":"$time_local",'
    '"remote_addr":"$remote_addr",'
    '"request":"$request",'
    '"status":$status,'
    '"body_bytes_sent":$body_bytes_sent,'
    '"request_time":$request_time,'
    '"upstream_response_time":"$upstream_response_time",'
    '"http_referer":"$http_referer",'
    '"http_user_agent":"$http_user_agent"'
'}';
access_log /var/log/nginx/access.json json_combined;
➤ GoAccess — rychlá analýza logů

Pro rychlou analýzu v konzoli doporučujeme GoAccess — kreslí reporty přímo v terminálu v reálném čase:

# Instalace
apt install goaccess
# Reálný čas v terminálu
goaccess /var/log/nginx/access.log -c
# HTML report
goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED
➤ Health Checks

Pro load balancing a monitoring potřebujete health check endpointy. V Nginx Open Source — pouze přes moduly třetích stran nebo skripty, v Nginx Plus — nativně.

Nejjednodušší varianta — monitorovat kód odpovědi 200 na stránce /health:

# Backend by měl vracet 200 OK na /health
location /health {
    access_log off;
    return 200 "healthy\n";
    add_header Content-Type text/plain;
}

Kontejnery a Kubernetes

V roce 2026 je kontejnerizace standardem pro produkci. Zde jsou best practices pro webové servery v kontejnerech.

➤ Docker best practices

Klíčová pravidla pro kontejnerizaci webových serverů:

  • Jeden proces na kontejner — Nginx zvlášť, PHP-FPM zvlášť
  • Alpine obrazy — nginx:alpine váží ~20MB místo ~140MB
  • Logy do stdout/stderr — nepište do souborů, Docker je sebere
  • Non-root user — spouštějte Nginx jako neprivilegovaný uživatel
# Dockerfile pro Nginx
FROM nginx:alpine
# Kopírování konfigurace
COPY nginx.conf /etc/nginx/nginx.conf
COPY conf.d/ /etc/nginx/conf.d/
# Non-root user
RUN chown -R nginx:nginx /var/cache/nginx
USER nginx
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]
➤ Kubernetes Ingress Controller

Nginx Ingress Controller je de facto standard ve světě K8s. Poskytuje:

  • SSL terminaci
  • Load balancing mezi pody
  • Path-based a host-based routing
  • Rate limiting
  • Vlastní chybové stránky
# Příklad Ingress resource
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/limit-rps: "100"
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - example.com
    secretName: example-tls
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-app
            port:
              number: 80

🚀 Výkonné servery pro váš projekt

Hostiserver nabízí VPS a dedikované servery s předkonfigurovaným Nginx nebo Apache — podle vašich potřeb.

🖥️ Co získáte:

  • Optimalizovaná konfigurace webového serveru
  • PHP 8.3 + PHP-FPM s tuningem
  • Bezplatné SSL certifikáty (Let's Encrypt)
  • HTTP/3 podpora
  • Konfigurace pro váš projekt
  • 24/7 technická podpora

💬 Nejste si jisti, co vybrat?
💬 Napište nám — pomůžeme s konfigurací!

Často kladené otázky

Mohu používat Nginx a Apache společně?

Ano, je to populární konfigurace. Nginx funguje jako Reverse Proxy (přijímá spojení, doručuje statiku, bufferuje pomalé klienty), zatímco Apache zpracovává dynamický obsah přes .htaccess.

To má smysl, pokud váš projekt kriticky závisí na .htaccess (např. Bitrix), ale chcete se chránit před Slowloris a optimalizovat doručování statiky.

Důležité: nepovolujte caching na obou úrovních — cachujte pouze na Nginx.

Který webový server je lepší pro WordPress?

Nginx + PHP-FPM + FastCGI Cache — rozhodně. O 15–30 % rychlejší v testech, stabilnější pod zátěží.

Apache má smysl pouze pokud používáte pluginy, které kriticky závisí na .htaccess (některé bezpečnostní pluginy, specifická přesměrování). Ale takových případů je stále méně — většina pluginů se přizpůsobila Nginx.

Pro WooCommerce s velkými katalogy je Nginx povinný — nastavte fastcgi_buffer_size pro velké stránky produktů.

Jak migrovat z Apache na Nginx?

Hlavní bolest je přepisování pravidel .htaccess do formátu Nginx. Automatické konvertory fungují špatně, většinu pravidel je třeba přepsat ručně.

Plán migrace:

  1. Seberte všechny .htaccess soubory z projektu
  2. Analyzujte pravidla (RewriteRule, RedirectMatch atd.)
  3. Napište ekvivalentní pravidla pro nginx.conf
  4. Nasaďte staging server s Nginx
  5. Otestujte všechny URL, přesměrování, formuláře
  6. Zkontrolujte SEO přesměrování (301) zvlášť
  7. Přepněte DNS nebo load balancer

Typický čas: od několika hodin (jednoduchý web) po několik dní (složitý projekt s mnoha .htaccess pravidly).

Co je HTTP/3 a potřebuji ho?

HTTP/3 je nová verze protokolu HTTP založená na QUIC (UDP místo TCP). V roce 2026 je to již stabilní technologie.

Výhody:

  • Rychlejší navázání spojení (0-RTT)
  • Lepší výkon při ztrátě paketů
  • Migrace spojení při změně sítě

Kdy je potřeba: Pokud vaše publikum jsou mobilní uživatelé nebo lidé s nestabilním internetem (špatná WiFi, LTE s výpadky) — HTTP/3 přinese znatelné zlepšení.

Pozor: Vyžaduje otevřený UDP port 443. Některé firemní sítě blokují UDP — vždy nastavte fallback na HTTP/2.

Proč můj Apache padá pod zátěží?

Nejpravděpodobnější příčina — vyčerpání limitu MaxRequestWorkers. Když jsou všechny sloty obsazené, Apache nemůže přijmout nová spojení.

Co zkontrolovat:

# Hledat v logu
grep "MaxRequestWorkers" /var/log/apache2/error.log
# Aktuální zátěž
apachectl status
# Spotřeba RAM
ps aux | grep apache | awk '{sum+=$6} END {print sum/1024 " MB"}'
# Počet procesů
ps aux | grep apache | wc -l

Řešení:

  1. Přejděte na MPM Event + PHP-FPM (pokud ještě ne)
  2. Vypočítejte MaxRequestWorkers pro vaši RAM
  3. Dejte Nginx před Apache jako buffer
  4. Nebo migrujte na Nginx kompletně
Jak nastavit monitoring webového serveru?

Minimální sada metrik:

  • Active connections
  • Requests per second (RPS)
  • Kódy odpovědí (4xx, 5xx)
  • Response time / Upstream time
  • CPU a RAM využití

Doporučené nástroje:

  • nginx-vts-exporter + Grafana — detailní statistiky pro hosty
  • GoAccess — rychlá analýza logů v terminálu
  • ELK Stack / Grafana Loki — centralizované logování
  • Prometheus + Node Exporter — systémové metriky

Doporučujeme JSON formát pro logy — to umožňuje okamžité indexování bez parsování.

Jaká automatizace je potřeba pro SSL certifikáty?

V roce 2026 je standardem Certbot (Let's Encrypt) s automatickou obnovou a reloadem konfigurace.

# Instalace
apt install certbot python3-certbot-nginx
# Získání certifikátu pro Nginx
certbot --nginx -d example.com -d www.example.com
# Automatická obnova (cron job se přidá automaticky)
certbot renew --dry-run

Certbot automaticky obnovuje certifikáty 30 dní před vypršením a reloaduje Nginx/Apache.

Contents

Sdílejte tento článek

MANAGED VPS STARTING AT

$19 95 / mo

NEW INTEL XEON BASED SERVERS

$80 / mo

CDN STARTING AT

$0 / mo

 

Tento web používá cookies. Používáním tohoto webu souhlasíte s politikou ochrany osobních údajů.