Úvod
Webové servery jsou základní součástí internetu již od počátků World Wide Web. Software webového serveru přijímá požadavky od vzdálených klientů a poskytuje klientům webové stránky uložené na hardwaru, jako jsou dedikované servery.
V tomto srovnávacím článku se dočtete o rozdílech mezi dvěma dnes nejpopulárnějšími webovými servery s otevřeným zdrojovým kódem – Apache a Nginx.
O serveru Apache
Apache HTTP Server (nebo zkráceně Apache) je software webového serveru s otevřeným zdrojovým kódem vyvinutý nadací Apache Software Foundation. Původně byl navržen jako procesně založený webový server, ale od verze 2.0 a zavedení Multi-Processing Modules může být konfigurován jako procesně založený i jako vláknový server. Modulární architektura serveru také umožňuje funkce, jako je modulární zpracování protokolů.
Další zásadní funkcí architektury Apache jsou filtry, které modulům umožňují interakci s obsahem vytvořeným jinými moduly. Tato interakce zahrnuje šifrování, antivirové kontroly a kompresi statického i dynamického obsahu.
Poznámka: Apache HTTP Server funguje nejlépe na Linuxu. Přečtěte si, jak nainstalovat Apache na CentOS. Pro Ubuntu si přečtěte Jak nainstalovat webový server Apache na Ubuntu. Pro základní správu webového serveru Apache si přečtěte, jak spustit, zastavit a restartovat Apache.
O serveru Nginx
Nginx (vyslovováno engine-x) je webový server s otevřeným zdrojovým kódem vyvinutý společností Nginx, která je součástí F5, Inc.
Jako HTTP server využívá Nginx vysoce škálovatelnou událostmi řízenou (asynchronní) architekturu umožňující vysoký výkon a malé nároky na paměť.
Nginx může také fungovat jako reverzní proxy, nástroj pro vyrovnávání zatížení, poštovní proxy a mezipaměť HTTP. V některých případech použití slouží Nginx také jako webový akcelerátor nebo terminátor SSL/TLS.
Poznámka: Stejně jako Apache je Nginx také nejvíce kompatibilní s Linuxem. Chcete-li nainstalovat Nginx na CentOS, přečtěte si část Jak nainstalovat Nginx na CentOS. Chcete-li jej nainstalovat na Ubuntu, přečtěte si Jak nainstalovat Nginx na Ubuntu. Základní pokyny pro správu Nginx najdete v tom, jak spustit, zastavit a restartovat Nginx.
Apache vs Nginx:Rychlý přehled
Níže je uveden rychlý přehled hlavních bodů srovnání mezi Apache a Nginx.
Kategorie | Apache | Nginx |
---|---|---|
Cena | K dispozici zdarma | Hlavní produkt, OSS Nginx, je k dispozici zdarma. Nginx Plus je placená možnost s podporou a dalšími funkcemi. |
Licencování | Licence Apache 2.0 | 2-klauzule BSD licence |
Napsáno | C, XML | C |
Operační systémy | Linux, Microsoft Windows, další systémy podobné Unixu, OpenVMS | Linux, macOS, Microsoft Windows, další systémy podobné Unixu, HP-UX, IBM AIX |
Architektura | Modulární, procesní/vláknové | Modulární, řízené událostmi |
Konfigurace | Distribuováno | Centralizované |
Výklad | Převážně založené na souborech | Primárně založené na URI |
Funkce | - Moduly pro více zpracování - Podpora konfigurace podle adresáře - Reverzní proxy s ukládáním do mezipaměti - Vyrovnávání zátěže kompatibilní s IPv6 - Podporuje HTTP/2 - Podpora XML Podpora FTP (se samostatným modulem) | - Poskytování statických a indexových souborů - Otevřete mezipaměť deskriptorů souborů - Zrychlené zpětné proxy s ukládáním do mezipaměti - Vyrovnávání zátěže a odolnost proti poruchám - Podporováno IPv6, ve výchozím nastavení není povoleno - Podporuje HTTP/2 - Mail proxy - HTTP mezipaměť |
Podpora | - Dokumentace k HTTP serveru Apache - Seznam uživatelů serveru Apache HTTP Server - IRC - Přetečení zásobníku - Komerční podpora ze strany poskytovatelů 3 stran | - Komunitní seznam adresátů - IRC - Přetečení zásobníku - Placená oficiální podpora pro Nginx Plus |
Architektura
Server Apache HTTP Server obsahuje malé serverové jádro a několik modulů. Moduly jsou buď staticky kompilovány, nebo načítány dynamicky.
Při spouštění Apache spustí několik serverových procesů. Účelem těchto procesů je sdílet pracovní zátěž. Hlavním procesem je rodičovský proces , zatímco ostatní jsou podřízené procesy . Každý podřízený proces vytvoří předem určený počet vláken serveru, která zpracovávají příchozí požadavky.
K optimalizaci serveru pro operační systém používá Apache Multi-Processing Module (MPM) . Účelem tohoto modulu je vázat se na síťové porty, přijímat požadavky a spravovat zpracování požadavků přiřazením podřízených procesů k provádění těchto úloh. Apache nainstaluje MPM nejvhodnější pro dané prostředí v závislosti na detekovaném OS a jeho schopnostech.
Knihovny Apache Portable Runtime (APR) jsou další důležitou součástí serveru Apache. APR poskytují vrstvu OS pro více platforem. Tato vrstva slouží jako univerzální API pro vývojáře, což eliminuje potřebu kódovat problémy nebo funkce specifické pro platformu.
Nginx obsahuje architekturu řízenou událostmi, která umožňuje snadné škálování na moderním hardwaru.
Stejně jako Apache má Nginx primární hlavní proces . Účelem tohoto procesu je řídit vazbu portu a čtení konfigurace. Na rozdíl od Apache jsou však procesy vytvořené hlavním procesem navrženy na základě předvídatelného procesního modelu, jehož hlavním cílem je co nejlepší využití hardwarových zdrojů.
- Zavaděč mezipaměti je proces, který běží při startu a načítá diskovou mezipaměť do paměti.
- Správce mezipaměti zajišťuje, že položky mezipaměti disku jsou v rámci definovaných limitů velikosti.
- pracovní procesy provádět operace čtení a zápisu a spravovat síťová připojení.
Pracovní procesy začínají nasloucháním a čekáním na události. Kdykoli je požadováno nové příchozí připojení, je iniciována událost. Po navázání připojení Nginx vytvoří deskriptor souboru, který zabírá pouze malé množství paměti pracovního procesu. Tato funkce činí Nginx výrazně škálovatelnějším než Apache, který používá procesní přístup, kde každé samostatné připojení spotřebovává velké množství zdrojů.
Moduly
Apache i Nginx používají přístupy založené na modulech. Implementace je však odlišná.
Apache obsahuje dynamicky načítané moduly, které lze použít, kdykoli je to potřeba. Server podporuje mnoho různých modulů, oficiálních i třetích stran. Díky tomu je Apache velmi přizpůsobitelná platforma, kterou si uživatelé mohou přizpůsobit podle svých potřeb.
Nginx moduly je třeba integrovat do jádra a nelze je dynamicky načítat. Aby uživatelé mohli zahrnout nestandardní moduly, musí svůj server zkompilovat ze zdroje. I když se tento nedostatek flexibility může zdát omezující, znamená to také lepší zabezpečení, protože umožnění dynamické integrace modulů představuje bezpečnostní problémy.
Výkon
Využitím různých podporovaných modulů pro více zpracování Apache může běžet ve třech režimech:
- Režim založený na procesu.
- Hybridní proces a režim vláken.
- Režim hybridních událostí.
Uživatel může nakonfigurovat Apache způsobem, který vyhovuje jeho potřebám. Prostředky serveru jsou tak efektivně využívány pro konkrétní případ použití.
Apache obsahuje sadu optimalizací pro zvýšení jeho propustnosti a škálovatelnosti. Některé z těchto optimalizací jsou součástí výchozí konfigurace serveru a administrátoři serveru mohou nakonfigurovat zbytek v závislosti na specifických potřebách jejich systému. Ladění výkonu může vyřešit mnoho problémů s konfigurací běhového prostředí Apache a kompilace.
Nginx je webový server vytvořený speciálně pro překonání Apache. Daří se mu to v několika kategoriích, jako je doba připojení, počet přijatých požadavků za sekundu, přenosová rychlost a čas strávený zpracováním požadavku.
Správci serveru mohou dále vyladit výkon Nginx úpravou konfigurace serveru tak, aby odpovídala specifikaci systému. Úprava pracovních procesů a připojení, povolení komprese Gzip a ukládání statických souborů do mezipaměti výrazně zlepšuje výkon Nginx.
Statický vs dynamický obsah
Apache zpracovává statický i dynamický obsah pomocí dynamicky načítaných modulů a nezávisí na externích komponentách.
Zatímco oba servery vykazují podobný výkon při dynamickém načítání obsahu, Nginx využívá mnohem méně paměti a zpracovává přibližně čtyřikrát více požadavků za sekundu pro obsluhu statických souborů. Je to hlavně proto, že interpret dynamického obsahu není nedílnou součástí serveru Nginx. Místo toho server předá všechny požadavky na dynamické webové stránky externímu procesu, čeká, až proces vrátí obsah, a poté obsah předá klientovi. I když to zkomplikuje zpracování dynamických stránek, zjednoduší to proces poskytování statických stránek.
Distribuovaná vs centralizovaná konfigurace
Apache konfigurace je distribuována. Server poskytuje podporu pro soubor .htaccess pro usnadnění tohoto typu konfigurace.
.htaccess
file je konfigurační soubor na úrovni adresáře podporovaný několika webovými servery, který se používá k řešení problémů s přístupem k webovým stránkám, jako je přesměrování URL, zkracování URL, řízení přístupu (pro různé webové stránky a soubory) a další. Hlavní výhodou tohoto přístupu je, že změny provedené v .htaccess
se okamžitě aplikují do systému. Změna hlavního konfiguračního souboru vyžaduje restart systému, aby se změny projevily.
Navíc na serverech, které hostují více webových stránek, .htaccess
umožňuje každému z uživatelů provádět změny v konfiguraci svých webových stránek bez změny hlavního konfiguračního souboru serveru.
Nginx konfigurace je centralizovaná a nepodporuje .htaccess
. Důvodem je použití .htaccess
má také několik nevýhod. Důležitá je ztráta výkonu – pokaždé, když server obdrží požadavek HTTP, musí zkontrolovat všechny nadřazené adresáře, které mohou hostit .htaccess
soubor, abyste zjistili, zda jej obsahují. Dalším významným problémem je bezpečnost. Povolit neprivilegovaným uživatelům upravovat konfiguraci serveru může být nebezpečné, pokud není správně implementováno.
Protože v Nginx neexistuje žádná konfigurace na úrovni adresáře, uživatelé provádějí všechny změny konfigurace zápisem direktiv do hlavního konfiguračního souboru nginx.conf
. Změny se použijí po opětovném načtení serveru.
Architektura zpracování připojení
Apache zpracovává požadavky klientů pomocí svých modulů pro více zpracování. Hlavní výhodou toho je, že architekturu zpracování připojení lze bez námahy vyměnit, kdykoli je to potřeba. Tyto moduly jsou:
mpm_prefork_module
– Modul prefork vytváří procesy s vláknem pro každý požadavek, který je třeba zpracovat. Každý podřízený proces může podporovat jedno připojení. Zatímco počet vytvořených procesů je větší než počet požadavků, tento modul funguje dobře. Hlavním problémem modulů je, že velké objemy požadavků negativně ovlivňují výkon a výrazně zvyšují spotřebu RAM.mpm_worker_module
– Pracovní modul vytváří podřízené procesy. Každý podřízený proces spravuje více vláken, přičemž každé vlákno podporuje připojení. Protože vlákna jsou efektivnější než procesy, je tento modul výkonnější než modul prefork.mpm_event_module
– Modul událostí obsahuje mechanismus podobný mechanismu pracovního modulu. Pokouší se však také vyřešit problém „udržovat při životě problém – skutečnost, že Apache po dokončení prvního požadavku klienta nechává celý podřízený proces nebo vlákno čekat na další požadavky klienta. Modul událostí řeší tento problém tím, že má určené vlákno posluchače monitorovat stav soketů.
Nginx zpracovává připojení pomocí asynchronního, neblokujícího, událostmi řízeného algoritmu. Pomocí funkce rychlého opakování mohou pracovní procesy serveru obsluhovat mnoho připojení současně neustálým vyhledáváním a zpracováním událostí.
Když pracovník naváže připojení, připojení se připojí ke smyčce událostí, kde podstoupí asynchronní zpracování. Když se spojení uzavře, opustí smyčku. Tento typ zpracování připojení umožňuje společnosti Nginx škálovat a využívat zdroje ekonomickým způsobem.
Interpretace na základě souboru vs. URI
Apache primárně interpretuje požadavky jako prostředky souborového systému pomocí Directory
a File
bloky. Server začíná DocumentRoot
a pokusí se najít soubor pomocí části požadavku následující za číslem hostitele a portu.
Apache nabízí alternativní způsoby doručení požadavku, když nelze najít správnou shodu pomocí systému souborů:
Alias
mapuje adresy URL na umístění systému souborů. Umožňuje ukládat dokumenty jinde než vDocumentRoot
.Redirect
mapuje starou adresu URL na novou adresu URL. Server požádá klienta, aby našel hledaný zdroj na jiném místě.Location
bloky umožňují práci s URI.
Na rozdíl od Apache, jehož design primárně odráží potřeby webového serveru, architektura Nginx umožňuje použití serveru jako proxy. Proto se Nginx zabývá hlavně URI.
Nginx používá server a bloky umístění jako primární konfigurační bloky:
- Blok serveru je podmnožinou konfiguračního souboru, který definuje virtuální server pro zpracování požadavků. Vzhledem k tomu, že virtuálním serverům lze přiřadit konkrétní typy připojení, mohou správci serverů přiřadit různé bloky pro různé názvy domén, porty a adresy IP.
- Blok umístění je součástí bloku serveru, který zpracovává požadavky na různé zdroje a identifikátory URI. Směruje požadavky do správného umístění v systému souborů.
Vzhledem k tomu, že více bloků může fungovat jako jednotlivé instance webového serveru, Nginx má systém pro nalezení nejlepší shody pro každý požadavek. To se provádí pomocí listen
direktivu, která najde možné shody bloku, a server_name
direktivu, která vybere nejlepší shodu.
Když Nginx pracuje se statickými soubory, mapuje požadavky na souborový systém. Server to však provede pouze po výběru serveru a bloků umístění a připojení kořenového adresáře dokumentu a identifikátoru URI. Skutečnost, že Nginx se nezabývá souborovým systémem, dokud není připraven obsloužit požadavek, je jedním z důvodů, proč neobsahuje .htaccess
ekvivalent souboru.
Ukládání do mezipaměti
Apache nabízí ukládání do mezipaměti pro zlepšení výkonu serveru. Existují tři typy ukládání do mezipaměti:
- Třístavové RFC2616 HTTP mezipaměť nabízí inteligentní ukládání do mezipaměti s podporou HTTP při práci s obsahem proxy nebo dynamickým obsahem uloženým lokálně.
- Dvoustavové ukládání sdíleného objektu do mezipaměti klíč/hodnota nabízí mezipaměť sdílených objektů na základě klíče/hodnoty.
- Specializované ukládání souborů do mezipaměti umožňuje předběžné načítání souborů při spuštění, čímž se zkracuje doba přístupu k souborům, které jsou často potřeba.
Nginx dosahuje rychlejších časů načítání a snižuje zatížení serveru ukládáním dynamického obsahu do mezipaměti pro rychlý přístup. I když ukládání do mezipaměti pomáhá urychlit weby s vysokým provozem a objemem obsahu, v jiných scénářích se nedoporučuje.
Základní ukládání do mezipaměti v Nginx používá pouze dvě direktivy:
proxy_cache_path
pro nastavení cesty a konfigurace mezipaměti aproxy_cache
aktivovat mezipaměť.
Užitečnou funkcí Nginx je možnost nakonfigurovat server tak, aby zobrazoval obsah webových stránek uložených v mezipaměti, když je server mimo provoz nebo je zaneprázdněn.
Zabezpečení
Apache a Nginx jsou oba považovány za bezpečné. Potenciální bezpečnostní rizika pramení většinou ze špatné konfigurace. Pro zvýšení bezpečnosti proto dodržujte doporučené postupy zabezpečení webového serveru:
Pro Apache :
- Upravte konfiguraci, abyste zabránili útokům DoS. Některé z relevantních direktiv jsou
RequestReadTimeout
,KeepAliveTimeout
aTimeOut
. - Upravit oprávnění na
ServerRoot
adresáře. - Buďte opatrní s zahrnutím na straně serveru (SSI).
- Buďte opatrní se skripty CGI.
- Chraňte nastavení systému před
.htaccess
přepíše konfigurací konfiguračního souboru serveru. - Sledujte své protokoly.
- Udržujte server aktuální.
Pro Nginx :
- Snižte riziko potenciálního zneužití zranitelnosti deaktivací nežádoucích modulů.
- Zakažte
server_tokens
direktiva, díky které bude vaše verze Nginx veřejně viditelná. - Zakažte nepotřebné metody HTTP.
- Ovládejte zdroje a limity, abyste zabránili potenciálním útokům DoS.
- Nastavte, nakonfigurujte a sledujte protokoly přístupu a chyb, abyste lépe porozuměli stavu serveru.
- Zahrňte bezpečnostní záhlaví.
- Udržujte server aktuální.
Podpora a dokumentace
Apache nabízí komunitní podporu prostřednictvím Apache HTTP Server Users Mailing List. Podpora je k dispozici také na vyhrazených kanálech IRC, Stack Overflow atd.
Dokumentace serveru Apache HTTP Server nabízí referenční příručky, uživatelské příručky, výukové programy a další dokumenty.
Nginx nabízí komunitní podporu, která se skládá z komunitou provozovaného seznamu adresátů a fóra, jakož i dalších zdrojů podpory, jako je příručka pro správce a referenční příručka modulů. Komerční podpora je k dispozici pro placenou možnost NGINX Plus.
Dokumentace Nginx s otevřeným zdrojovým kódem obsahuje pokyny k instalaci, postupy, vývojové příručky, odkazy na moduly a další dokumenty.
Apache nebo Nginx
Nejnovější data průzkumu podílu na trhu ukazují, že Apache je mírně před Nginxem.
Pokud se však podíváme pouze na 1000 nejlépe hodnocených webů, Nginx je s velkým náskokem napřed.
Apache i Nginx jsou leštěné, dobře fungující servery. Při výběru správného serveru pro instalaci na váš hardware musíte zvážit, k čemu jej budete používat.
Vyberte Apache před Nginx, pokud:
- Ve vašem případě použití je vhodnější, aby měli nad svými weby kontrolu neprivilegovaní uživatelé. Jedním z těchto případů je správa sdíleného hostitelského prostředí, ve kterém je
.htaccess
Apache soubor se stává prakticky nepostradatelným. - Potřebujete určité moduly, které Nginx nepodporuje.
Vyberte Nginx před Apache, pokud:
- Váš scénář použití zahrnuje většinou (nebo výhradně) zobrazování statického obsahu.
- Na svých webových stránkách očekáváte vysoký objem návštěvnosti.
Kdy používat Nginx i Apache
Apache a Nginx mohou být použity vedle sebe k vytvoření serveru optimalizovaného pro pracovní zatížení. Nginx je nastaven tak, aby fungoval jako reverzní proxy pro Apache, který využívá rychlost zpracování Nginx a schopnost zvládnout velké objemy provozu. Nginx zpracovává a poskytuje statický obsah a zároveň předává dynamický obsah do Apache.
Tím, že necháte Nginx třídit požadavky a zpracovávat ty, které zvládne sám, Apache obdrží menší objem požadavků. To preventivně řeší potenciální problémy s přetížením. Protože Nginx může komunikovat se serverovým fondem v backendu, lze snadno přidávat další servery a škálovat.