Az 1. oldal tartalma
Bevezető
Többfelhasználós szerverkörnyezetben elengedhetetlen a nagyobb fokú biztonság és a felhasználók webkönyvtárainak egymástól való függetlensége. A PHP telepítésekor alapból a mod_php szerver API-t használja a futtatott weboldalaknál, ami fejlesztői környezetként megfelelő, de egy többfelhasználós, több weboldalt futtató éles szervernél már nem ajánlott. Hátrányai között szerepel például, hogy a futtatott weboldalak mindegyikénél ugyanazzal a felhasználóval hajtja végre az oldalakon lévő szerver oldali PHP scripteket, ami nem biztonságos. Továbbá a statikus weboldalaknál is betöltődik az Apache PHP modulja, ami többlet erőforrást igényel.
Vannak azonban ennél fejlettebb, biztonságosabb és hatékonyabb megoldások, mint például a FastCGI, vagy ennek a továbbfejlesztett változata – a CGI vonal jelenlegi legmodernebb PHP futtatási módja – a PHP FastCGI Process Manager, elterjedtebb nevén PHP-FPM. A PHP-FPM főbb előnyei a mod_php-hez képest:
- A PHP-t nem az Apache futtatja, hanem egy az Apache-től különálló FastCGI szerver, az FPM. Így a statikus weboldalak lekérésénél nem kerül betöltésre.
- A weboldalak PHP fájljait nem csak az Apache felhasználója (www-data) futtathatja, hanem lehetőség van minden weboldal számára a hozzárendelt linux felhasználóját beállítani erre. Így például a felhasználók nem férhetnek hozzá a másik felhasználó weboldalának dolgaihoz.
- Az előzőből eredően a tárhely feltöltéséhez használt FTP programok is futtathatók ugyanennek a felhasználónak a nevében, ezáltal az FTP-n keresztül feltöltött és a weboldal űrlapjaival feltöltött fájloknak ugyanaz lesz a tulajdonosa, így nem kell folyamatosan állítgatni a jogosultságokat.
- Lehetőség van minden weboldal számára, hogy külön php.ini fájlt használjon, ezáltal minden weboldal PHP környezete egyedileg is finomhangolható.
- Adaptív folyamat menedzsment az optimális szerver erőforrás kihasználás érdekében. Ez azt jelenti, hogy a PHP-FPM akkor és annyi folyamatot indít el a szerveren, amennyi éppen szükséges a szerverre beérkező pillanatnyi Apache kérelmek alapján.
És még rengeteg előnye van, ami inkább a háttérben működő dolgokkal kapcsolatosak.
Előfeltételek
Az ettől eltérő szerverkörnyezetre illetve disztribúcióra történő telepítés esetén nincs garancia, hogy működni fog.
Csomagok frissítése és telepítése
Frissítsük a csomagtárakat és a csomagjainkat az apt-get parancsokkal:
apt-get update
apt-get upgrade
Ezután telepítsük a php5-fpm csomagot:
apt-get -y install php5-fpm
A csomag a PHP motorhoz és annak számos bővítményéhez biztosítja az FPM támogatást. Telepítésekor engedélyezi a PHP bővítményeket az FPM SAPI számára:
PHP-FPM ellenőrzése
A csomagok feltelepítése után ellenőrizhetjük is a PHP-FPM működését. Először indítsuk el:
service php5-fpm start
Majd az alábbi systemctl paranccsal kérdezzük le az állapotát:
systemctl status php5-fpm.service
Erre hasonló kimenetet kell adnia:
● php5-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/lib/systemd/system/php5-fpm.service; enabled) Active: active (running) since sze 2019-03-13 14:33:46 CET; 3h 3min ago Main PID: 25865 (php5-fpm) Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec" CGroup: /system.slice/php5-fpm.service ├─25865 php-fpm: master process (/etc/php5/fpm/php-fpm.conf) ├─25866 php-fpm: pool www └─25867 php-fpm: pool www márc 13 17:36:38 szerver1 systemd[1]: Started The PHP FastCGI Process Manager.
PHP-FPM beállítása
A PHP-FPM beállítása sokféleképpen lehetséges. Ebben a leírásban a mod_proxy_fcgi Apache modul által kínált jelenlegi legújabb módszert tekintjük át, ami a Debian 8 (Jessie) rendszerben lévő Apache 2.4.10-es verziójától használható. A módszer a webkiszolgáló fordított proxy-ként történő használatának elvén alapul, ami röviden annyit jelent, hogy a kiszolgálóhoz beérkező PHP kéréseket az Apache Handler segítségével átirányítja egy FastCGI szervernek, ami jelen esetben a PHP-FPM.
Valamint megismerkedünk ennek a módszernek többféle felhasználási módjával is.
Először engedélyezni kell a mod_proxy_fcgi Apache modult:
a2enmod proxy_fcgi
Globális beállítás (egyfelhasználós mód)
A legegyszerűbb beállítási mód, amikor globálisan az egész szerveren egyszerre engedélyezzük a PHP-FPM-et, amit ugyanazzal a linux felhasználóval futtatunk. Erre akkor lehet szükség, amikor a szervert csak fejlesztői környezetként használjuk, és nincs szükségünk a többfelhasználós webkörnyezetre, mivel csak mi magunk használjuk az egészet. Ekkor nem kell minden weboldalt külön felhasználóként futtatni, ezáltal egy felhasználóként tudjuk őket fejleszteni, karbantartani a fájlok tulajdonosainak keveredése nélkül, ami sokkal kényelmesebb munkakörnyezetet teremt. Mindemellett ugyanúgy kihasználhatjuk a PHP-FPM többi előnyét. Ez a beállítási forma tehát opcionális, ha így kívánjuk használni a PHP-FPM-et, csak akkor hajtsuk végre a globális beállításhoz tartozó részeket.
Beállítás Unix domain socket (UDS) használatával
A Unix domain socket (UDS) egy viszonylag új dolog az Apache történetében, mindössze csak a 2.4.9-es verziójától tudja kezelni. Használata akkor jön jól, ha az Apache webkiszolgáló és az általa hívott FastCGI szerver (jelen esetben ez a PHP-FPM) egy fizikai szerveren vannak, ilyenkor a rendszer helyi socket-jein keresztül kommunikálnak egymással. Ennek előnye, hogy a webkiszolgálóhoz beérkező PHP kéréseknek nem kell áthaladniuk a különböző hálózati protokollokon, hanem csak a helyi fájlrendszerben történik írás/olvasás. Tehát ez a beállítási mód valamennyivel jobb kiszolgálói teljesítményt nyújt.
Nyissuk meg a www.conf fájlt:
nano /etc/php5/fpm/pool.d/www.conf
Majd keressük meg az alábbi részeket, és állítsuk be ennek megfelelően:
[...] user = www-data group = www-data [...] listen = /var/run/php5-fpm.sock [...] listen.owner = www-data listen.group = www-data [...] security.limit_extensions = .php .html [...]
Itt az alapbeállítás szerint is a www-data van beállítva mindenhol, de azért betettem, ha esetleg mégse így lenne valahol.
Indítsuk újra a PHP-FPM-et:
systemctl restart php5-fpm.service
Ekkor a PHP-FPM létrehozza a beállított helyen a socket fájlt.
Ezután jön az Apache rész. Nyissuk meg (vagy hozzuk létre, amennyiben nincs) a /etc/apache2/mods-available/proxy_fcgi.conf fájlt:
nano /etc/apache2/mods-available/proxy_fcgi.conf
És tegyük bele a következő részt:
<IfModule mod_proxy_fcgi.c> <FilesMatch "\.(php|html)$"> SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost" </FilesMatch> </IfModule>
Mentsük le, majd indítsuk újra az Apache-ot:
systemctl restart apache2.service
És készen is vagyunk.
Beállítás TCP socket használatával
A TCP socket-ek segítségével lehetőség van a PHP-FPM-et egy másik szerveren futtatni, így a távoli gép IP-címével és portszámával is hivatkozhatunk rá.
Beállítása majdnem ugyanúgy történik, mint a Unix socket-ek esetén, kivéve a beállítások 1-1 sorát.
nano /etc/php5/fpm/pool.d/www.conf
[...] user = www-data group = www-data [...] listen = 127.0.0.1:9000 [...] listen.owner = www-data listen.group = www-data [...] security.limit_extensions = .php .html [...]
Majd a PHP-FPM újraindítása:
systemctl restart php5-fpm.service
Apache beállítás:
nano /etc/apache2/mods-available/proxy_fcgi.conf
<IfModule mod_proxy_fcgi.c> <FilesMatch "\.(php|html)$"> SetHandler "proxy:fcgi://localhost:9000/" </FilesMatch> </IfModule>
Végül Apache újraindítás:
systemctl restart apache2.service
Tesztelés
Teszteléséhez hozzunk létre a szerveren a document root könyvtárban egy php fájlt, amibe tegyük bele a következőt:
1 2 3 <?php phpinfo(); ?>
Majd a böngészőből betöltve a következőt kell látnunk:
Itt ahova a zöld pöttyöt is tettem, a Server API sorában a "FPM/FastCGI" értéknek kell lennie. Majd lejjebb görgetve pedig ellenőrizhetjük a PHP-t futtató felhasználót, és a felhasználói, illetve dokumentum gyökér könyvtárakat:
A következő oldalon folytatjuk a PHP-FPM weboldal-specifikus beállításával...
- Enciklopédia - PHP-FPM
- Debian 8 (Jessie) LAMP szerver v1.0 telepítése
- Hogyan telepíthetünk újabb PHP verziókat Debian 9 (Stretch) LAMP szerverünkre PHP-FPM módban
- Hogyan telepíthetjük fel a PHP 8-at Debian vagy Ubuntu rendszerű szerverünkre
- Hogyan állítsuk át manuálisan egy PHP-FPM pool-ban futó weboldalunk vagy webalkalmazásunk PHP verzióját?
- Enciklopédia - Apache HTTP Server
- apache.org - mod_proxy_fcgi
- wiki.apache.org - PHP-FPM
- A PHP 8 újdonságai és változásai
Lapozó
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
- 402 megtekintés