GNU/Linux >> Znalost Linux >  >> Ubuntu

Apache vs Nginx - podrobné srovnání

Ú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ž v DocumentRoot .
  • 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 a
  • proxy_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 a TimeOut .
  • 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.


Ubuntu
  1. Apache vs Nginx:Který webový server byste si měli vybrat

  2. Nainstalujte WordPress na Nginx Ubuntu

  3. Nainstalujte Apache na CentOS 8

  1. PostgreSQL vs MySQL:Podrobné srovnání

  2. Hadoop vs Spark – podrobné srovnání

  3. Apache Storm vs. Spark:Srovnání vedle sebe

  1. Jak nainstalovat Nginx na Ubuntu 20.04

  2. Instalace Nginx na Ubuntu 14.04 a 16.04

  3. NGINX vs Apache – Výběr nejlepšího webového serveru v roce 2022