Különálló PHP-FPM készletek beállítása az NGINX-ben
Megjelent: 2025. február 15. 11:52:30 UTC
Utolsó frissítés: 2026. január 12. 8:29:58 UTC
Ebben a cikkben áttekintem azokat a konfigurációs lépéseket, amelyek több PHP-FPM pool futtatásához és az NGINX FastCGI-n keresztüli csatlakoztatásához szükségesek, lehetővé téve a folyamatok elválasztását és izolálását a virtuális hosztok között.
How to Set Up Separate PHP-FPM Pools in NGINX
A bejegyzésben található információk az Ubuntu Server 14.04 x64 rendszeren futó NGINX 1.4.6 és PHP-FPM 5.5.9 verziókra vonatkoznak. Előfordulhat, hogy más verziókra nem. (Frissítés: Megerősíthetem, hogy az Ubuntu Server 24.04, a PHP-FPM 8.3 és az NGINX 1.24.0 verzióktól kezdve a bejegyzésben található összes utasítás továbbra is működik.)
Számos előnye van annak, ha több PHP-FPM gyermekfolyamat-poolt állítunk be, mintha mindent egy poolban futtatnánk. Néhány fontosabb közülük a biztonság, az elkülönítés/izoláció és az erőforrás-kezelés.
Bármi legyen is a motivációd, ez a poszt segíteni fog neked :-)
1. rész – Új PHP-FPM készlet beállítása
Először is meg kell találnod azt a könyvtárat, ahol a PHP-FPM tárolja a pool konfigurációit. Ubuntu 14.04 alatt ez alapértelmezés szerint a /etc/php5/fpm/pool.d. Valószínűleg már van ott egy www.conf nevű fájl, amely az alapértelmezett pool konfigurációját tartalmazza. Ha még nem nézted meg ezt a fájlt, akkor valószínűleg át kell nézned, és módosítanod kell a benne lévő beállításokat a saját konfigurációdnak megfelelően, mivel az alapértelmezett értékek egy meglehetősen gyenge szerverre vonatkoznak, de most csak készíts róla egy másolatot, hogy ne kelljen a nulláról kezdenünk:
Természetesen a „mypool” részt cseréld le arra, aminek a nevét a medencédnek szeretnéd.
Most nyisd meg az új fájlt a nano vagy bármely más szövegszerkesztő használatával, és igazítsd a célodnak megfelelően. Valószínűleg módosítanod kell a gyermekfolyamatok számát, és esetleg azt is, hogy melyik felhasználó és csoport alatt fut a pool, de a két beállítást feltétlenül meg kell változtatnod: a pool nevét és a socketet, amelyre figyel, különben ütközni fog a meglévő pool-lal, és a dolgok nem fognak működni.
Pool neve a fájl tetején található, szögletes zárójelben. Alapértelmezés szerint [www]. Módosítsd ezt bármilyen kívánt névre; azt javaslom, hogy ugyanazt az elnevezést add, mint a konfigurációs fájlnak, tehát a példa kedvéért változtasd meg [mypool]-ra. Ha nem változtatod meg, úgy tűnik, hogy a PHP-FPM csak az első ilyen nevű konfigurációs fájlt fogja betölteni, ami valószínűleg hibás lesz.
Ezután meg kell változtatnod a figyelt socketet vagy címet, amelyet a listen direktíva határoz meg. Alapértelmezés szerint a PHP-FPM Unix socketeket használ, így a listen direktívád valószínűleg így fog kinézni:
Bármilyen érvényes névre megváltoztathatod, de ismét azt javaslom, hogy maradj valami hasonlónál, mint a konfigurációs fájlnév, például beállíthatod így:
Rendben, akkor mentsd el a fájlt és lépj ki a szövegszerkesztőből.
2. rész – Az NGINX virtuális gép konfigurációjának frissítése
Most meg kell nyitnia az NGINX virtuális host fájlt a FastCGI konfigurációval, amelyet új készletre szeretne módosítani – vagy inkább csatlakozni az új sockethez.
Alapértelmezés szerint az Ubuntu 14.04-en ezek az /etc/nginx/sites-available könyvtárban tárolódnak, de máshol is definiálhatók. Valószínűleg te tudod a legjobban, hogy hol találhatók a virtuális gép konfigurációi ;-)
Nyisd meg a megfelelő konfigurációs fájlt a kedvenc szövegszerkesztődben, és keresd meg a fastcgi_pass direktívát (aminek egy helymeghatározási kontextusban kell lennie), amely a PHP-FPM socketet definiálja. Ezt az értéket úgy kell módosítanod, hogy megegyezzen az első lépésben létrehozott új PHP-FPM pool konfigurációval, tehát a példánk folytatásaként ezt a következőre kellene módosítanod:
Fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Ezután mentsd el és zárd be ezt a fájlt is. Már majdnem kész vagy.
3. rész – Indítsa újra a PHP-FPM-et és az NGINX-et
Konfigurációs módosítások alkalmazásához indítsd újra a PHP-FPM-et és az NGINX-et is. Lehet, hogy elég az újraindítás az újraindítás helyett, de én kicsit kapásnak találom, attól függően, hogy mely beállítások változnak. Ebben a konkrét esetben azt szerettem volna, ha a régi PHP-FPM gyermekfolyamatok azonnal leállnak, ezért újra kellett indítanom a PHP-FPM-et, de az NGINX esetében az újraindítás elegendő lehet. Próbáld ki magad.
sudo service nginx restart
És voilá, kész is vagy. Ha mindent jól csináltál, a módosított virtuális gépnek most az új PHP-FPM készletet kell használnia, és nem szabad megosztania a gyermekfolyamatokat más virtuális gépekkel.
