Servery a DevOps

Apache vs. nginx: který webový server zvolit pro VPS

Praktické srovnání Apache a nginx: architektura, .htaccess, PHP, statické soubory, konfigurace a kdy dává smysl kombinace obou. Bez marketingu.

12. 10. 2026 · 4 min čtení

Apache HTTP Server a nginx jsou dva nejrozšířenější open-source webové servery. Oba jsou stabilní, rychlé a zvládnou většinu webů. Rozdíly jsou hlavně v architektuře, způsobu konfigurace a tom, jak se chovají při velkém počtu spojení. Tady je srovnání, které vám pomůže vybrat.

Architektura

Apache zpracovává požadavky přes MPM moduly (Multi-Processing Modules):

  • prefork – jeden proces na spojení, nutný pro mod_php,
  • worker – vlákna v procesech,
  • event – vlákna + asynchronní obsluha keep-alive spojení; doporučená volba s PHP-FPM.

nginx je od začátku postavený na událostech: několik worker procesů (obvykle jeden na jádro), z nichž každý obsluhuje tisíce spojení neblokujícím způsobem. Paměťová náročnost proto při rostoucím počtu spojení roste jen pomalu.

V praxi moderní Apache s mpm_event výrazně zmenšil rozdíl, který byl vidět v dobách prefork. Nginx ale zůstává úspornější při velkém množství pomalých nebo nečinných spojení.

Konfigurace a .htaccess

Hlavní praktický rozdíl.

Apache podporuje soubory .htaccess – konfiguraci přímo v adresářích webu. Výhoda: uživatel bez root přístupu si upraví přesměrování nebo ochranu heslem. Proto je Apache standard na sdíleném hostingu a mnoho PHP aplikací (WordPress, starší frameworky) dodává hotový .htaccess.

Nevýhoda: Apache při každém požadavku prochází adresáře a hledá .htaccess, což stojí výkon. Na vlastním serveru je lepší pravidla dát do konfigurace virtual hostu a .htaccess vypnout (AllowOverride None).

nginx nic jako .htaccess nemá. Veškerá konfigurace je centrální a změny vyžadují nginx -t a reload. Je to bezpečnější a rychlejší, ale pravidla z .htaccess musíte přepsat ručně.

Příklad – „pěkné URL“ pro PHP aplikaci:

# Apache .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
# nginx
location / {
    try_files $uri $uri/ /index.php?$query_string;
}

PHP

Apache nginx
mod_php (PHP v procesu serveru) ano, ale jen s prefork ne
PHP-FPM přes FastCGI ano (mod_proxy_fcgi) ano (fastcgi_pass)
Různé verze PHP pro různé weby přes PHP-FPM přes PHP-FPM

Na novém serveru doporučujeme v obou případech PHP-FPM. Oddělí PHP od webového serveru, umožní ladit počet PHP workerů zvlášť a provozovat víc verzí PHP současně.

Statické soubory a reverse proxy

Nginx je velmi efektivní při servírování statických souborů a jako reverse proxy před aplikacemi v Node.js, Pythonu nebo Go. Konfigurace proxy_pass je přímočará a nginx má zabudované cachování odpovědí (proxy_cache).

Apache to zvládne také (mod_proxy, mod_cache), jen konfigurace bývá upovídanější.

Moduly

Apache načítá moduly dynamicky: a2enmod rewrite, a2enmod headers a restart. Výběr modulů je široký (autentizace, WebDAV, mod_security …).

Nginx moduly z velké části kompiluje přímo do binárky. Dynamické moduly existují, ale balíček z distribuce nabízí jen určitou sadu (v Ubuntu jako balíčky libnginx-mod-*).

Správa na Ubuntu

Úkol Apache nginx
Instalace apt install apache2 apt install nginx
Konfigurace webů /etc/apache2/sites-available/ /etc/nginx/sites-available/
Povolit web a2ensite web.conf ln -s do sites-enabled
Test konfigurace apache2ctl configtest nginx -t
Načíst změny systemctl reload apache2 systemctl reload nginx
Logy /var/log/apache2/ /var/log/nginx/

Kombinace: nginx před Apache

Častý vzor: nginx na portu 80/443 vyřizuje TLS a statické soubory, Apache za ním na 127.0.0.1:8080 zpracovává PHP aplikace s .htaccess. Dává to smysl při migraci z hostingu, kdy nechcete přepisovat pravidla. U nové instalace je jednodušší vybrat jen jeden server – každá vrstva navíc je další konfigurace a další místo, kde se může něco pokazit.

Při kombinaci nezapomeňte v Apache povolit mod_remoteip, jinak bude v logech jen 127.0.0.1.

Kdy zvolit Apache

  • migrujete web ze sdíleného hostingu a spoléháte na .htaccess,
  • aplikace výslovně vyžaduje Apache nebo jeho moduly,
  • tým s Apache umí a nemá důvod měnit.

Kdy zvolit nginx

  • nový projekt, hlavně s Node.js, Pythonem nebo Go za reverse proxy,
  • hodně statického obsahu nebo hodně souběžných spojení,
  • malý VPS, kde se počítá každý megabajt RAM.

Pozor na souběh

Na jednom serveru nemůžou oba naslouchat na portu 80. Pokud po instalaci druhého serveru vidíte chybu Address already in use, jeden z nich vypněte (sudo systemctl disable --now apache2) nebo ho přesuňte na jiný port.

Volba není otázkou „lepšího“ serveru. Oba jsou zralé nástroje; rozhoduje, jakou aplikaci provozujete a s čím umíte pracovat.