Jak nakonfigurovat Apache HTTP s MPM Event a PHP-FPM na FreeBSD 12.0
Autor vybral nadaci Open Internet/Free Speech Fund pro získání příspěvku v rámci programu Write for DOnations.
Úvod
Webový server Apache HTTP se v průběhu let vyvíjel tak, aby fungoval v různých prostředích a řešil různé potřeby. Jedním z důležitých problémů, které musí Apache HTTP řešit, stejně jako každý webový server, je, jak zpracovat různé procesy pro obsluhu požadavku protokolu http. To zahrnuje otevření socketu, zpracování požadavku, udržování spojení otevřeného po určitou dobu, zpracování nových událostí, které se vyskytnou prostřednictvím tohoto spojení, a vrácení obsahu vytvořeného programem vytvořeným v určitém jazyce (například PHP, Perl nebo Python). Tyto úlohy provádí a řídí modul MPM (Multi-Processing Module).
Apache HTTP se dodává se třemi různými MPM:
- Pre-fork: Pro každé příchozí spojení, které dorazí na server, je vytvořen nový proces. Každý proces je izolován od ostatních, takže mezi nimi není sdílena žádná paměť, i když v určitém okamžiku svého provádění provádějí totožná volání. Jedná se o bezpečný způsob spouštění aplikací propojených s knihovnami, které nepodporují vlákna – typicky starší aplikace nebo knihovny.
- Worker: Nadřazený proces je zodpovědný za spuštění skupiny podřízených procesů, z nichž některé naslouchají novým příchozím spojením a jiné obsluhují požadovaný obsah. Každý proces je vláknový (jedno vlákno může obsluhovat jedno spojení), takže jeden proces může obsluhovat několik požadavků současně. Tento způsob zacházení s připojeními podporuje lepší využití prostředků při zachování stability. Je to důsledek fondu dostupných procesů, který má často volná dostupná vlákna připravená okamžitě obsloužit nová připojení.
- Událost: Na základě workeru jde tento MPM ještě o krok dále tím, že optimalizuje způsob, jakým nadřazený proces plánuje úlohy podřízeným procesům a k nim přiřazeným vláknům. Spojení zůstává ve výchozím nastavení otevřené po dobu 5 sekund a uzavře se, pokud nenastane žádná nová událost; to je výchozí hodnota směrnice keep-alive, která zachovává přidružené vlákno. MPM událostí umožňuje procesu spravovat vlákna tak, že některá vlákna jsou volná pro zpracování nových příchozích spojení, zatímco jiná zůstávají vázána na živá spojení. Umožnění přerozdělování přidělených úloh vláknům umožní lepší využití prostředků a výkon.
Modul Event MPM je rychlý víceprocesorový modul dostupný na webovém serveru Apache HTTP.
PHP-FPM je správce procesů FastCGI pro PHP. Protokol FastCGI je založen na Common Gateway Interface (CGI), protokolu, který se nachází mezi aplikacemi a webovými servery, jako je Apache HTTP. To umožňuje vývojářům psát aplikace odděleně od chování webových serverů. Programy spouštějí své procesy nezávisle a prostřednictvím tohoto protokolu předávají svůj produkt webovému serveru. Každé nové připojení, které aplikace potřebuje zpracovat, vytvoří nový proces.
Kombinací události MPM v Apache HTTP se správcem procesů PHP FastCGI (PHP-FPM) se webové stránky mohou načítat rychleji a zvládnout více souběžných připojení při využití menšího množství prostředků.
V tomto návodu zlepšíte výkon zásobníku FAMP změnou výchozího modulu více zpracování z pre-fork na event a použitím správce procesů PHP-FPM pro zpracování kódu PHP namísto klasického mod_php
v Apache HTTP.
Předpoklady
Před zahájením tohoto návodu budete potřebovat následující:
- Server FreeBSD 12.0 nastavený podle tohoto návodu.
- Soubor FAMP nainstalovaný na serveru podle tohoto návodu.
- Přístup uživatele s právy roota (nebo povolený pomocí sudo), abyste mohli provádět změny konfigurace.
Krok 1 – Změna multiprocesorového modulu
Začnete hledáním směrnice pre-fork v souboru httpd.conf
. Jedná se o hlavní konfigurační soubor pro Apache HTTP, ve kterém můžete povolovat a zakazovat moduly. V tomto souboru můžete upravovat a nastavovat směrnice, jako je naslouchací port, na kterém bude Apache HTTP obsluhovat obsah, nebo umístění obsahu, který se má zobrazit.
Pro provedení těchto změn použijete program nl
, číslování řádků, s příznakem -ba
pro počítání a číslování řádků, aby se později nic neshodovalo. V kombinaci s příkazem grep
tento příkaz nejprve spočítá všechny řádky v souboru zadaném v cestě a po dokončení vyhledá hledaný řetězec znaků.
Spustíte následující příkaz, aby program nl
zpracoval a očísloval řádky v httpd.conf
. Pak grep
zpracuje výstup tak, že vyhledá zadaný řetězec znaků 'mod_mpm_prefork'
:
- nl -ba /usr/local/etc/apache24/httpd.conf | grep 'mod_mpm_prefork'
Jako výstup uvidíte něco podobného:
Output 67 LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
Upravíme řádek 67 pomocí textového editoru. V tomto návodu použijete vi
, což je výchozí editor ve FreeBSD:
- sudo vi +67 /usr/local/etc/apache24/httpd.conf
Na začátek řádku přidejte symbol #
, aby byl tento řádek zakomentován, například takto:
...# LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so...
Přidáním symbolu #
jste zakázali modul MPM před forkem.
Nyní najdete směrnici pro události ve stejném souboru httpd.conf
.
- nl -ba /usr/local/etc/apache24/httpd.conf | grep mpm_event
Uvidíte výstup podobný následujícímu:
Output...66 #LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so...
Nyní odstraníte symbol #
na řádku 66, čímž povolíte MPM událostí:
- sudo vi +66 /usr/local/etc/apache24/httpd.conf
Direktivu nyní budete číst takto:
...LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so...
Teď, když jste přepnuli konfiguraci z MPM pre-fork na event, můžete odstranit balíček mod_php73
propojující procesor PHP s Apache HTTP, protože už není potřeba a pokud zůstane v systému, bude překážet:
- sudo pkg remove -y mod_php73
Ujistěte se, že je konfigurace správná, spuštěním následujícího testovacího příkazu:
- sudo apachectl configtest
Pokud se ve výstupu zobrazí Syntax OK
, můžete restartovat server Apache HTTP:
- sudo apachectl restart
Poznámka: Pokud na serveru běží další připojení HTTP, doporučuje se místo běžného restartu provést tzv. graceful restart. Tím zajistíte, že uživatelé nebudou vytlačeni a ztratí své připojení:
- sudo apachectl graceful
Přepnuli jste MPM z pre-fork na event a odstranili mod_php73
modul připojení PHP k Apache HTTP. V dalším kroku nainstalujete modul PHP-FPM a nakonfigurujete Apache HTTP tak, aby mohl s PHP komunikovat rychleji.
Krok 2 – Konfigurace Apache HTTP pro použití správce procesů FastCGI
FreeBSD má několik podporovaných verzí PHP, které můžete nainstalovat pomocí správce balíčků. Ve FreeBSD jsou zkompilovány různé binární soubory různých dostupných verzí namísto použití pouze jedné, jak to nabízí většina distribucí GNU/Linuxu ve svých výchozích repozitářích. Chcete-li dodržet osvědčené postupy, použijete podporovanou verzi, kterou si můžete ověřit na stránce podporovaných verzí PHP.
V tomto kroku přidáte PHP-FPM jako běžící službu, která se spustí při startu systému. Také nakonfigurujete Apache HTTP pro práci s PHP přidáním vyhrazené konfigurace pro modul a také povolením některých dalších modulů v httpd.conf
.
Nejprve do souboru /etc/rc.conf
přidáte 'php_fpm_enable=YES'
, aby se služba PHP-FPM mohla spustit. Uděláte to pomocí příkazu sysrc
:
- sudo sysrc php_fpm_enable="YES"
Nyní přidáte modul php-fpm
do adresáře modulu Apache, aby byl nakonfigurován tak, aby jej používal Apache HTTP. Za tímto účelem vytvořte následující soubor:
- sudo vi /usr/local/etc/apache24/modules.d/030_php-fpm.conf
Doplňte do adresáře 030_php-fpm.conf
:
<IfModule proxy_fcgi_module> <IfModule dir_module> DirectoryIndex index.php </IfModule> <FilesMatch "\.(php|phtml|inc)$"> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch></IfModule>
Toto říká, že pokud je povolen modul 'proxy_fcgi'
a také 'dir_module'
, pak by všechny zpracovávané soubory odpovídající příponám v závorkách měl zpracovávat správce procesů FastCGI běžící na místním počítači přes port 9000
– jako by místní počítač byl proxy server. Zde dochází k propojení modulu PHP-FPM a Apache HTTP. Abyste toho dosáhli, aktivujete během tohoto kroku další moduly.
Pro aktivaci modulu proxy jej nejprve vyhledáte v souboru httpd.conf
:
- nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy.so
Uvidíte výstup podobný následujícímu:
Output...129 #LoadModule proxy_module libexec/apache24/mod_proxy.so...
Řádek odkomentujete odstraněním symbolu #
:
- sudo vi +129 /usr/local/etc/apache24/httpd.conf
Po úpravě bude řádek vypadat takto:
...LoadModule proxy_module libexec/apache24/mod_proxy.so...
Nyní můžete aktivovat modul FastCGI. Vyhledejte modul následujícím příkazem:
- nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy_fcgi.so
Uvidíte něco podobného:
Output...133 #LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so...
Nyní odkomentujte řádek 133, jak jste již učinili u ostatních modulů:
- sudo vi +133 /usr/local/etc/apache24/httpd.conf
Řádek ponecháte v následujícím stavu:
...LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so...
Po dokončení tohoto kroku spustíte službu PHP-FPM:
- sudo service php-fpm start
A restartujete Apache, aby načetl nejnovější změny konfigurace zahrnující modul PHP:
- sudo apachectl restart
Nainstalovali jste modul PHP-FPM, nakonfigurovali Apache HTTP tak, aby s ním pracoval, povolili potřebné moduly pro fungování protokolu FastCGI a spustili příslušné služby.
Teď, když má Apache povolen modul Event MPM a PHP-FPM je přítomen a spuštěn, je čas zkontrolovat, zda vše funguje, jak má.
Krok 3 – Kontrola konfigurace
Pro kontrolu, zda byly změny konfigurace použity, provedete několik testů. První z nich zkontroluje, jaký víceprocesorový modul Apache HTTP používá. Druhý ověří, zda PHP používá správce FPM.
Server Apache HTTP zkontrolujete spuštěním následujícího příkazu:
- sudo apachectl -M | grep 'mpm'
Výstup bude následující:
Outputmpm_event_module (shared)
To samé můžete zopakovat pro modul proxy a FastCGI:
- sudo apachectl -M | grep 'proxy'
Výstup bude vypadat takto:
Outputproxy_module (shared)proxy_fcgi_module (shared)
Pokud chcete vidět celý seznam modulů, můžete odstranit druhou část příkazu za -M
.
Nyní je čas zkontrolovat, zda PHP používá správce procesů FastCGI. Za tímto účelem napíšete velmi malý skript PHP, který vám zobrazí všechny informace týkající se PHP.
Spusťte následující příkaz, který zapíše soubor s následujícím názvem:
- sudo vi /usr/local/www/apache24/data/info.php
Do souboru info.php přidejte následující obsah:
<?php phpinfo(); ?>
Nyní navštivte adresu URL svého serveru a na konec připojte info.php
takto: http://your_server_IP_address/info.php
.
Zápis API serveru bude FPM/FastCGI.
Po této kontrole nezapomeňte smazat soubor info.php
, aby nebyly zveřejněny žádné informace o serveru.
- sudo rm /usr/local/www/apache24/data/info.php
Zkontrolovali jste funkčnost modulu MPM, modulů obsluhujících FastCGI a obsluhu kódu PHP.
Závěr
.
Leave a Reply