Upraveno 11 prosince, 2023 13:32
Apache HTTP webový server se vyvíjel v průběhu mnoha let, aby fungoval v různých prostředích a řešil různé potřeby uživatele. Jedním důležitým problémem, který musí Apache, stejně jako každý webový server vyřešit, je způsob zpracování různých procesů pro obsluhu požadavku protokolu HTTP. Apache server obsahuje celkem tři různé MPM moduly a v tomto článku si ukážeme jak nakonfigurovat Apache s MPM Event a PHP-FPM na Ubuntu. Tedy jak změnit základní variantu PREFORK na Event.
Jak nakonfigurovat Apache s MPM Event a PHP-FPM na Ubuntu
Webový server Apache obsahuje celkem tři různé MPM moduly. Pre-fork, Worker a Event. Pojďme se na ně podívat:
Pre-fork MPM
- Pre-fork je základní způsob, jak Apache zpracovává požadavky.
- Každý příchozí požadavek vytváří nový proces (něco jako kopie serveru), který se o tento požadavek stará.
- Tyto procesy jsou na sobě nezávislé a každý má vlastní paměťový prostor.
- Výhodou tohoto přístupu je, že problém v jednom procesu neovlivní ostatní procesy.
- Nevýhodou je, že každý proces spotřebovává paměť a výpočetní zdroje, což může omezit výkon serveru.
Worker MPM
- Worker MPM je pokročilejší způsob, jak zpracovávat požadavky v Apache.
- Místo vytváření nových procesů pro každý požadavek, používá Apache jeden hlavní proces a několik vláken.
- Každé vlákno se stará o jeden požadavek najednou.
- Vlákna sdílí paměťový prostor, což snižuje spotřebu paměti a výpočetní zdroje oproti pre-forku.
- Díky použití vláken může server efektivně zpracovávat více požadavků najednou a dosáhnout vyššího výkonu.
Event MPM
- Event MPM je ještě pokročilejší, než Worker MPM.
- Používá jak vlákna, tak asynchronní I/O operace (operace načítání nebo zápisu bez čekání na dokončení) pro efektivní zpracování požadavků.
- Event MPM používá model událostí, který umožňuje serveru obsluhovat více požadavků najednou.
- Tento přístup je velmi efektivní pro velké množství požadavků, když je server hodně zatížený.
- Event MPM také minimalizuje „keep-alive“ spojení, kdy se spojení mezi klientem a serverem udržuje otevřené pro opakované použití.
Pojďme si to vysvětlit trochu lidskou řečí
Představte si, že Apache HTTP Server je velkým restauračním týmem, který zpracovává objednávky od zákazníků.
Pre-fork MPM:
- Máme restauraci s velkým počtem kuchařů, přičemž každý kuchař pracuje samostatně.
- Když přijde zákazník a zadá svou objednávku, restaurace přidělí zákazníkovi nového kuchaře, který se zaměří na zpracování této jedné objednávky.
- Pokud je v restauraci více zákazníků, každý z nich dostane svého vlastního kuchaře.
- Každý kuchař má zároveň vlastní pracovní prostor (paměť) a pracuje nezávisle na ostatních.
- Tímto způsobem se zajišťuje, že problém s jedním kuchařem neovlivní ostatní kuchaře, ale zároveň to vyžaduje více zdrojů (kuchařů).
Worker MPM:
- Tentokrát máme restauraci s menším počtem kuchařů, kteří však pracují jako tým.
- Místo toho, aby každý zákazník měl svého vlastního kuchaře, spolupracují kuchaři na přípravě všech objednávek spolu.
- Když přijde zákazník s objednávkou, jeden volný kuchař z týmu se jí ujme a začne ji zpracovávat.
- Další kuchaři v týmu mohou v té době pracovat na zpracování dalších objednávek.
- Kuchaři sdílí pracovní prostor (paměť) a efektivně spolupracují na obsluze více objednávek současně.
Event MPM:
- Nyní máme moderní restauraci s malým, ale velmi efektivním týmem kuchařů.
- Kuchaři využívají speciální metody, které jim umožňují rychle zpracovávat objednávky.
- Když zákazník přijde, jeden kuchař se okamžitě chopí objednávky a začne ji zpracovávat.
- Zároveň mohou ostatní kuchaři připravovat další přísady, nebo se starat o další objednávky.
Tým kuchařů spolupracuje a efektivně zvládá mnoho objednávek současně.
Jak nakonfigurovat Apache s MPM Event a PHP-FPM na Ubuntu
Nyní si ukážeme postup, jak na Ubuntu serveru změníte MPM modul ze standardního Pre-fork na Event. Konkrétně si to ukážeme na Apache serveru s PHP ve verzi 8.2.
Nejprve stopněte Apache HTTP službu
sudo systemctl stop apache2
Nyní deaktivujte modul PHP 8.2 který souvisí s modulem Pre-fork:
sudo a2dismod php8.2
Nyní deaktivujte pre-fork mpm modul:
sudo a2dismod mpm_prefork
V tomto bodě již můžete aktivovat mpm event modul:
sudo a2enmod mpm_event
Konfigurace Apache HTTP pro použití FastCGI Process Manageru
V této fázi jste nyní změnili způsob, jakým Apache HTTP zpracovává připojení, přechodem z původního Pre-fork MPM na nový, Event MPM. V postupu jste ale deaktivovali modul PHP, který propojoval Apache HTTP s jakýmkoli programem, běžícím na PHP. U následujícího kroku nainstalujete procesor PHP-FPM, takže Apache bude opět schopen zpracovávat jakékoliv PHP programy. Zároveň si nainstalujete knihovny závislostí a povolíte potřebné moduly aby spolu mohly spolupracovat rychleji než předtím.
Nejprve nainstalujte php-fpm
sudo apt install php-fpm
Aby Apache a PHP spolu mohli komunikovat potřebují knihovnu, která jim to umožní. Nainstalujte tedy libapache2-mod-fcgid, která bude sloužit jako rozhraní mezi programy na webech a je specifická přímo pro Apache. Tato komunikace bude probíhat prostřednictvím soketu UNIX. Nainstalujte tedy knihovnu tímto příkazem:
sudo apt install libapache2-mod-fcgid
Nyní aktivujte php-fpm pomocí tohoto příkazu:
sudo a2enconf php8.2-fpm
Nyní pomocí níže uvedeného příkazu aktivujte Apache HTTP proxy modul:
sudo a2enmod proxy
Také aktivujte FastCGI proxy modul:
sudo a2enmod proxy_fcgi
Nyní můžete spustit Apache
Aktuálně máte vše připravené, takže můžete opětovně nastartovat Apache. Nejprve ale pro jistotu udělejte konfigurační test:
sudo apachectl configtest
Měli byste obdržet takovýto výstup:
Syntax OK
Pokud je vše v pořádku, restartujte Apache:
sudo systemctl restart apache2
Nyní jste nainstalovali modul php-fpm a nakonfigurovali jste Apache, aby s tímto modulem uměl pracovat. Také jste povolili fungování nezbytných modulů pro protokol FastCGI a spustili jste odpovídající služby.
Otestujte si konfiguraci
Pokud nyní budete chtít otestovat, zda se změny konfigurace provedly, můžete použít několik testů. První zkontroluje, jaký modul Apache nyní používá. Druhý příkaz ověří, že PHP používá jako správce právě FPM:
sudo apachectl -M | grep 'mpm'
Jako výstup byste nyní měli obdržet:
mpm_event_module (shared)
To samé můžete použít pro proxy modul:
sudo apachectl -M | grep 'proxy'
Aktuální výstup vypadá takto:
proxy_module (shared)
proxy_fcgi_module (shared)
Poslední test, který můžete provést je pomocí funkce phpinfo. Vytvořte si tedy na běžícím webu soubor info.php a vložte do něj tento malý kód:
Jakmile nyní zavoláte soubor info.php pomocí webového prohlížeče, měl by Vám zobrazit kompletní výpis nastavení PHP na Vašem serveru. Vás bude nejvíce zajímat řádek Server API, kde byste měli vidět FPM/FastCGI.
Jak nakonfigurovat Apache s MPM Event a PHP-FPM na Ubuntu
Závěr
Nyní jste kompletně u konce a nakonfigurovali jste si Apache na PHP-FPM a modul Event. PHP-FPM bude nyní zpracovávat PHP kód mnohem efektivněji a i využití zdrojů nyní budete mít lepší
Web je vytvářen s pečlivostí k obsaženým informacím. Snažím se poskytovat kvalitní a užitečný obsah, který ostatním pomáhá, nebo je inspiruje. Pokud jste spokojeni s mou prací a chtěli byste mě podpořit, můžete to udělat prostřednictvím jednoduchých možností.
Byl pro Vás tento článek užitečný?
Klikni na počet hvězd pro hlasování.
Průměrné hodnocení. 0 / 5. Počet hlasování: 0
Zatím nehodnoceno! Buďte první
Je mi líto, že pro Vás nebyl článek užitečný.
Jak mohu vylepšit článek?
Řekněte mi, jak jej mohu zlepšit.
Odebírejte Newsletter
Buďte v obraze! Připojte se k odběru newsletteru a buďte první, kdo získá nejnovější informace přímo do vaší e-mailové schránky. Sledujte aktuality, exkluzivní události a inspirativní obsah, přímo na Vašem e-mailu.