Hogyan konfiguráljuk az Apache HTTP-t MPM eseménnyel és PHP-FPM-mel Ubuntu 18.04-en

A szerző a COVID-19 segélyalapot 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 olyan alkalmazások futtatásának, amelyek olyan könyvtárakhoz kapcsolódnak, amelyek nem támogatják a szálkezelést – 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 webkiszolgálóhoz 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, egy új folyamatot hoz létre.

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

Ebben a bemutatóban a LAMP stack teljesítményét javítja azáltal, hogy az alapértelmezett multiprocessing modult pre-forkról eventre 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:

  • Egy Ubuntu 18.04 szerver beállítása az Ubuntu 18.04 kezdeti szerver beállítási útmutatójának megfelelően, beleértve egy sudo nem root felhasználót és egy tűzfalat.
  • A LAMP stack telepítése a szerverre a How To Install Linux, Apache, MySQL, PHP (LAMP stack) on Ubuntu 18.04 című útmutatót követve.

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

Az Ubuntu az Apache HTTP modulok engedélyezésére vagy letiltására szolgáló szkripteket az anyadisztribúciójától, a Debiantól örökli. Ebben a lépésben ezt az eszközkészletet fogja használni a Pre-fork modul letiltásához és az Event modul engedélyezéséhez.

Ezzel a lépéssel leállítja az Apache HTTP-t, letiltja a Pre-fork modulhoz kapcsolódó PHP 7.2 modult, majd letiltja a Pre-forkot, hogy azonnal engedélyezze az Event modult.

Először leállítja az Apache HTTP szolgáltatást:

  • sudo systemctl stop apache2

Ezután letilthatja a Pre-fork modulhoz kapcsolódó PHP 7.2 modult:

  • sudo a2dismod php7.2

Ezután letiltja a Pre-fork MPM modult:

  • sudo a2dismod mpm_prefork

Most engedélyezze az Esemény MPM modult:

  • sudo a2enmod mpm_event

Az MPM-et pre-forkról eseményre váltotta, és megszüntette a PHP 7.2 modul kapcsolatát a PHP és az Apache HTTP között. A következő lépésben telepíti a php-fpm modult, valamint a kapcsolódó könyvtárakat és proxy modulokat. Az Apache HTTP-t úgy konfigurálja, hogy a PHP-vel is tudjon kommunikálni.

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

Ebben a szakaszban az Apache HTTP kapcsolatfeldolgozási módját a Pre-fork MPM-ről az Eventre való áttéréssel átállította. Útközben azonban letiltotta a PHP modult, amely összekapcsolta az Apache HTTP-t minden PHP-n futó programmal.

Ezzel a lépéssel telepíti a PHP-FPM processzort, így az Apache HTTP ismét képes lesz a PHP programok feldolgozására. Továbbá telepíti a függőségi könyvtárakat és engedélyezi a modulokat, hogy mindkettő zökkenőmentesen és gyorsabban tudjon együttműködni, mint korábban.

Először telepítse a php-fpm. A következő parancs telepíti a PHP-FPM csomagot, és automatikusan engedélyezi a systemd-be integrált php7.2-fpm szolgáltatást, így a szolgáltatás elindul a rendszerindításkor:

  • sudo apt install php-fpm

A kommunikációhoz az Apache HTTP-nek és a PHP-nek szüksége van egy olyan könyvtárra, amely lehetővé teszi ezt a képességet. Most telepíteni fogod a libapache2-mod-fcgid könyvtárat, amely képes interfészként szolgálni a webkiszolgálóval rendelkező programok között, és az Apache HTTP-re jellemző. Ez a kommunikáció egy UNIX socket-en keresztül fog történni.

Telepítse ezt a könyvtárat:

  • sudo apt install libapache2-mod-fcgid

A php-fpm és a libapache2-mod-fcgid könyvtárat már telepítette, de még egyik sincs engedélyezve.

Először engedélyezze a php-fpm modult a következő paranccsal:

  • sudo a2enconf php7.2-fpm

Második engedélyezze az Apache HTTP proxy modult:

  • sudo a2enmod proxy

Harmadszor engedélyezze a FastCGI proxy modult az Apache HTTP-ben:

  • sudo a2enmod proxy_fcgi

Megjegyz: A PHP programok és az Apache HTTP közötti interakció konfigurációját egy UNIX socket-en keresztül a következőkkel olvashatja:

  • cat /etc/apache2/conf-enabled/php7.2-fpm.conf

Most már minden a helyén van, így elindíthatja az Apache HTTP-t. Először elvégez egy konfigurációs ellenőrzést:

  • sudo apachectl configtest
Output
Syntax OK

Ezután folytathatja az Apache HTTP újraindítását, mivel a FastCGI könyvtár libapache2-mod-fcgid telepítésekor automatikusan elindult:

  • sudo systemctl restart apache2

Az 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 is 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 -M utáni második részt eltávolíthatja a parancsból.

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

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

  • sudo nano /var/www/your_domain/info.php

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

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

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

A szerver API bejegyzése az FPM/FastCGI lesz.

PHP Screen the Server API entry FPM/FastCGI

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

  • sudo rm /var/www/yourdomain.com/info.php

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

Következtetés

.