Hogyan konfiguráljuk az Apache HTTP-t MPM Esemény és PHP-FPM segítségével FreeBSD 12.0 alatt

A szerző az Open Internet/Free Speech Fund-ot választotta ki, hogy adományt kapjon a Write for DOnations program keretében.

Bevezetés

Az Apache HTTP webszerver az évek során fejlődött, hogy különböző környezetekben működjön és különböző igényeket oldjon meg. Az egyik fontos probléma, amelyet az Apache HTTP-nek – mint minden webkiszolgálónak – meg kell oldania, az, hogy hogyan kezelje a különböző folyamatokat egy http protokoll szerinti kérés kiszolgálásához. Ez magában foglalja egy socket megnyitását, a kérés feldolgozását, a kapcsolat nyitva tartását egy bizonyos ideig, a kapcsolaton keresztül bekövetkező új események kezelését, valamint egy adott nyelven (például PHP, Perl vagy Python) készült program által előállított tartalom visszaadását. Ezeket a feladatokat egy többprocesszoros modul (MPM) végzi és vezérli.

Az Apache HTTP három különböző MPM-mel rendelkezik:

  • Pre-fork: Minden egyes, a szervert elérő bejövő kapcsolathoz új folyamatot hoz létre. Mindegyik folyamat el van szigetelve a többitől, így nem osztanak meg memóriát egymás között, még akkor sem, ha a végrehajtásuk egy bizonyos pontján azonos hívásokat hajtanak végre. Ez egy biztonságos módja a szálkezelést nem támogató könyvtárakhoz kapcsolt alkalmazások futtatásának – jellemzően régebbi alkalmazások vagy könyvtárak.
  • Munkavállaló: Egy szülőfolyamat felelős a gyermekfolyamatok egy csoportjának elindításáért, amelyek közül egyesek új bejövő kapcsolatokra figyelnek, mások pedig kiszolgálják a kért tartalmat. Minden folyamat szálas (egyetlen szál képes egy kapcsolatot kezelni), így egy folyamat egyszerre több kérést is kezelhet. A kapcsolatok kezelésének ez a módja jobb erőforrás-kihasználást ösztönöz, miközben a stabilitás is megmarad. Ez a rendelkezésre álló folyamatok pooljának köszönhető, amely gyakran rendelkezik szabad, elérhető szálakkal, amelyek készen állnak az új kapcsolatok azonnali kiszolgálására.
  • Esemény: A worker alapján ez az MPM egy lépéssel tovább megy, optimalizálva azt, hogy a szülőfolyamat hogyan ütemezi a feladatokat a gyermekfolyamatoknak és a hozzájuk tartozó szálaknak. Egy kapcsolat alapértelmezés szerint 5 másodpercig marad nyitva, és bezáródik, ha nem történik új esemény; ez a keep-alive direktíva alapértelmezett értéke, amely megtartja a hozzá tartozó szálat. Az Event MPM lehetővé teszi a folyamat számára a szálak kezelését úgy, hogy egyes szálak szabadon kezelhessék az új bejövő kapcsolatokat, míg mások az élő kapcsolatokhoz kötve maradnak. A hozzárendelt feladatok szálakhoz való újraelosztásának lehetővé tétele jobb erőforrás-kihasználást és teljesítményt tesz lehetővé.

Az MPM Event modul az Apache HTTP webszerverhez elérhető gyors többprocesszoros modul.

A PHP-FPM a FastCGI folyamatkezelő a PHP számára. A FastCGI protokoll a Common Gateway Interface (CGI) protokollon alapul, amely az alkalmazások és a webszerverek, például az Apache HTTP között helyezkedik el. Ez lehetővé teszi a fejlesztők számára, hogy az alkalmazásokat a webszerverek viselkedésétől elkülönítve írják meg. A programok önállóan futtatják folyamataikat, és terméküket ezen a protokollon keresztül adják át a webkiszolgálónak. Minden egyes új kapcsolat, amelyet egy alkalmazásnak fel kell dolgoznia, új folyamatot hoz létre.

Az Apache HTTP MPM eseményének és a PHP FastCGI Process Manager (PHP-FPM) kombinálásával egy weboldal gyorsabban betölthető és több egyidejű kapcsolatot tud kezelni, miközben kevesebb erőforrást használ.

Ez a bemutató javítja a FAMP stack teljesítményét azáltal, hogy az alapértelmezett multiprocessing modult pre-forkról eseményre változtatja, és a PHP-FPM folyamatkezelőt használja a PHP kód kezelésére az Apache HTTP klasszikus mod_php helyett.

Előfeltételek

Az útmutató megkezdése előtt a következőkre lesz szüksége:

  • A FreeBSD 12.0 szerver beállítása az útmutató szerint.
  • A FAMP stack telepítése a szerverre az útmutató szerint.
  • Egy root jogosultságokkal rendelkező (vagy a sudo használatával engedélyezett) felhasználó hozzáférése a konfigurációs módosítások elvégzéséhez.

1. lépés – A többprocesszoros modul módosítása

Az httpd.conf fájlban a pre-fork utasítás megkeresésével kezdjük. Ez az Apache HTTP fő konfigurációs fájlja, amelyben engedélyezheti és letilthatja a modulokat. Ebben a fájlban szerkesztheti és állíthatja be az olyan direktívákat, mint például a figyelő port, ahol az Apache HTTP kiszolgálja a tartalmat, vagy a megjelenítendő tartalom helye.

Ezek a módosítások elvégzéséhez a nl, sorszámozás, programot fogja használni, a -ba flaggel a sorok számolásához és számozásához, hogy a későbbiekben semmi ne legyen hibás. A grep paranccsal kombinálva ez a parancs először megszámolja az összes sort az elérési útvonalban megadott fájlban, majd ha végzett, megkeresi a keresett karakterláncot.

Futtassa a következő parancsot, hogy a nl program feldolgozza és megszámozza a httpd.conf-ban lévő sorokat. Ezután a grep feldolgozza a kimenetet úgy, hogy megkeresi a megadott karaktersorozatot 'mod_mpm_prefork':

  • nl -ba /usr/local/etc/apache24/httpd.conf | grep 'mod_mpm_prefork'

Kimenetként valami hasonlót fog látni:

Output
67 LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so

Szerkesszük a 67. sort a szövegszerkesztővel. Ebben a bemutatóban a vi-t fogjuk használni, ami a FreeBSD alapértelmezett szerkesztője:

  • sudo vi +67 /usr/local/etc/apache24/httpd.conf

Tegyünk egy # szimbólumot a sor elejére, hogy ez a sor ki legyen kommentálva, így:

/usr/local/etc/apache24/httpd.conf
...# LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so...

A # szimbólum hozzáadásával letiltottuk a pre-fork MPM modult.

Most ugyanebben a httpd.conf fájlban találod az esemény direktívát.

  • nl -ba /usr/local/etc/apache24/httpd.conf | grep mpm_event

A következőhöz hasonló kimenetet fog látni:

Output
...66 #LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so...

Most eltávolítja a # szimbólumot a 66. sorban, hogy engedélyezze az Event MPM-et:

  • sudo vi +66 /usr/local/etc/apache24/httpd.conf

A direktíva most a következő lesz:

/usr/local/etc/apache24/httpd.conf
...LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so...

Most, hogy a konfigurációt az MPM pre-forkról átállította az eseményre, eltávolíthatja a mod_php73 csomagot, amely a PHP processzort az Apache HTTP-vel köti össze, mivel már nincs rá szükség, és zavarni fog, ha a rendszerben marad:

  • sudo pkg remove -y mod_php73

Tesztelésképpen győződjön meg a konfiguráció helyességéről a következő parancs futtatásával:

  • sudo apachectl configtest

Ha a kimeneten Syntax OK jelenik meg, akkor újraindíthatja az Apache HTTP szervert:

  • sudo apachectl restart

Megjegyzés: Ha a szerveren más HTTP-kapcsolatok is futnak, akkor a rendszeres újraindítás helyett a kíméletes újraindítás ajánlott. Ez biztosítja, hogy a felhasználók nem fognak kiszorulni, elveszítve a kapcsolatukat:

  • sudo apachectl graceful

Az MPM-et pre-forkról eseményre váltotta, és eltávolította a mod_php73 modul PHP kapcsolatát az Apache HTTP-hez. A következő lépésben telepíti a PHP-FPM modult, és úgy konfigurálja az Apache HTTP-t, hogy gyorsabban tudjon kommunikálni a PHP-vel.

2. lépés – Az Apache HTTP konfigurálása a FastCGI folyamatkezelő használatára

A FreeBSD több támogatott PHP-verzióval rendelkezik, amelyeket a csomagkezelőn keresztül telepíthet. A FreeBSD-n a különböző elérhető verziók különböző binárisai kerülnek lefordításra, ahelyett, hogy csak egyet használnánk, mint a legtöbb GNU/Linux disztribúció alapértelmezett tárolójában. A legjobb gyakorlatot követve a támogatott verziót fogja használni, amit a PHP támogatott verziók oldalán ellenőrizhet.

Ezzel a lépéssel hozzáadja a PHP-FPM-et a rendszerindításkor indítandó futó szolgáltatáshoz. Az Apache HTTP-t is úgy konfiguráljuk, hogy működjön a PHP-vel, hozzáadva egy külön konfigurációt a modulhoz, valamint engedélyezve néhány további modult a httpd.conf-ban.

Először a /etc/rc.conf fájlhoz csatoljuk a 'php_fpm_enable=YES'-t, hogy a PHP-FPM szolgáltatás elindulhasson. Ezt a sysrc paranccsal fogod megtenni:

  • sudo sysrc php_fpm_enable="YES"

Most hozzáadod a php-fpm modult az Apache modul könyvtárába, hogy az Apache HTTP által használhatóvá legyen konfigurálva. Ehhez hozza létre a következő fájlt:

  • sudo vi /usr/local/etc/apache24/modules.d/030_php-fpm.conf

Adja hozzá a 030_php-fpm.conf fájlhoz a következőket:

/usr/local/etc/apache24/modules.d/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>

Ez azt mondja ki, hogy ha a 'proxy_fcgi' modul engedélyezve van, valamint a 'dir_module', akkor a zárójelben lévő kiterjesztéseknek megfelelő feldolgozott fájlokat a helyi gépen futó FastCGI folyamatkezelőnek kell kezelnie a 9000 porton keresztül – mintha a helyi gép egy proxy szerver lenne. Itt kapcsolódik össze a PHP-FPM modul és az Apache HTTP. Ennek eléréséhez további modulokat fog aktiválni ebben a lépésben.

A proxy modul aktiválásához először meg kell keresni a httpd.conf fájlban:

  • nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy.so

Az alábbiakhoz hasonló kimenetet fog látni:

Output
...129 #LoadModule proxy_module libexec/apache24/mod_proxy.so...

A sort a # szimbólum eltávolításával kommentáljuk ki:

  • sudo vi +129 /usr/local/etc/apache24/httpd.conf

A sor szerkesztés után a következőképpen fog kinézni:

/usr/local/etc/apache24/httpd.conf
...LoadModule proxy_module libexec/apache24/mod_proxy.so...

Most már aktiválhatjuk a FastCGI modult. Keresse meg a modult a következő paranccsal:

  • nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy_fcgi.so

Az alábbiakhoz hasonlót fog látni:

Output
...133 #LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so...

Most a 133-as sort vegye ki a megjegyzéseket, ahogy a többi modul esetében már megtette:

  • sudo vi +133 /usr/local/etc/apache24/httpd.conf

A sort a következőképpen hagyja:

/usr/local/etc/apache24/httpd.conf
...LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so...

Azt követően elindítja a PHP-FPM szolgáltatást:

  • sudo service php-fpm start

És újraindítja az Apache-ot, hogy betöltse a PHP modult tartalmazó legújabb konfigurációs változásokat:

  • sudo apachectl restart

A PHP-FPM modult telepítette, az Apache HTTP-t úgy konfigurálta, hogy működjön vele, engedélyezte a FastCGI protokoll működéséhez szükséges modulokat, és elindította a megfelelő szolgáltatásokat.

Most, miután az Apache engedélyezte az Event MPM modult, és a PHP-FPM jelen van és fut, ideje ellenőrizni, hogy minden a kívánt módon működik-e.

3. lépés – A konfiguráció ellenőrzése

A konfigurációs változások alkalmazásának ellenőrzéséhez lefuttat néhány tesztet. Az első azt ellenőrzi, hogy az Apache HTTP milyen többprocesszoros modult használ. A második azt ellenőrzi, hogy a PHP használja-e az FPM menedzsert.

Az Apache HTTP kiszolgálót a következő parancs futtatásával ellenőrizheti:

  • sudo apachectl -M | grep 'mpm'

A kimenete a következő lesz:

Output
mpm_event_module (shared)

Ezeket megismételheti a proxy modul és a FastCGI esetében is:

  • sudo apachectl -M | grep 'proxy'

A kimenet a következő lesz:

Output
proxy_module (shared)proxy_fcgi_module (shared)

Ha a modulok teljes listáját szeretné látni, akkor a parancs második részét a -M után eltávolíthatja.

Itt az ideje ellenőrizni, hogy a PHP használja-e a FastCGI folyamatkezelőt. Ehhez írj egy nagyon kis PHP szkriptet, amely megmutatja az összes PHP-vel kapcsolatos információt.

Futtasd le a következő parancsot, hogy írj egy fájlt, amelynek a következő a neve:

  • sudo vi /usr/local/www/apache24/data/info.php

Add hozzá a következő tartalmat az info.php fájlhoz:

info.php
<?php phpinfo(); ?>

Most látogass el a szervered URL címére, és a végére illessz info.php-ot a következőképpen: http://your_server_IP_address/info.php.

A szerver API bejegyzése a következő lesz: FPM/FastCGI.

PHP Screen the Server API entry FPM/FastCGI

Ne felejtse el törölni a info.php fájlt az ellenőrzés után, hogy semmilyen információ ne kerüljön nyilvánosságra a szerverről.

  • sudo rm /usr/local/www/apache24/data/info.php

Elérte az MPM modul, a FastCGI-t kezelő modulok és a PHP kód kezelésének működési állapotát.

Következtetés

.

Leave a Reply