Hoe om aparte PHP-FPM-poele in NGINX op te stel
Gepubliseer: 15 Februarie 2025 om 11:55:12 UTC
In hierdie artikel gaan ek oor die konfigurasiestappe wat nodig is om verskeie PHP-FPM-poele te laat loop en NGINX aan hulle te koppel via FastCGI, wat prosesskeiding en isolasie tussen virtuele gashere moontlik maak.
How to Set Up Separate PHP-FPM Pools in NGINX
Die inligting in hierdie pos is gebaseer op NGINX 1.4.6 en PHP-FPM 5.5.9 wat op Ubuntu Server 14.04 x64 loop. Dit mag of mag nie geldig wees vir ander weergawes nie. (Opdatering: Ek kan bevestig dat vanaf Ubuntu Server 24.04, PHP-FPM 8.3 en NGINX 1.24.0, al die instruksies in hierdie pos steeds werk)
Daar is 'n aantal voordele verbonde aan die opstel van veelvuldige PHP-FPM kinderprosespoele eerder as om alles in dieselfde poel te laat loop. Sekuriteit, skeiding/isolasie en hulpbronbestuur kom na vore as 'n paar belangrike aspekte.
Ongeag wat jou motivering is, hierdie pos sal jou help om dit te doen :-)
Deel 1 – Stel 'n nuwe PHP-FPM-poel op
Eerstens moet u die gids opspoor waar PHP-FPM sy swembadkonfigurasies stoor. Op Ubuntu 14.04 is dit by verstek /etc/php5/fpm/pool.d. Daar is waarskynlik reeds 'n lêer genaamd www.conf , wat die konfigurasie vir die verstekpoel bevat. As jy nog nie eers na daardie lêer gekyk het nie, is die kans groot dat jy daardeur moet gaan en die instellings daarin vir jou opstelling aanpas, aangesien die verstekwaardes vir 'n redelik onderkrag bediener is, maar maak vir nou net 'n kopie daarvan sodat ons nie van voor af hoef te begin nie:
Vervang natuurlik "mypool" met wat jy ook al wil hê jou swembad moet genoem word.
Maak nou die nuwe lêer oop met behulp van nano of watter teksredigeerder jy ook al verkies en pas dit aan om by jou doel te pas. Jy sal waarskynlik die kinderprosesnommers wil aanpas en moontlik onder watter gebruiker en groep die swembad loop, maar die twee instellings wat jy absoluut moet verander is die swembad se naam en die sok waarna dit luister, anders sal dit bots met die bestaande swembad en dinge sal ophou werk.
Die naam van die swembad is naby die bokant van die lêer, ingesluit in vierkantige hakies. By verstek is dit [www] . Verander dit na wat jy ook al wil hê; Ek stel dieselfde voor as wat jy die konfigurasielêer genoem het, so verander dit ter wille van hierdie voorbeeld na [mypool] . As jy dit nie verander nie, blyk dit dat PHP-FPM net die eerste konfigurasielêer met daardie naam sal laai, wat waarskynlik dinge sal breek.
Jy moet dan die sok of adres waarna jy luister verander, wat deur die luistervoorskrif gedefinieer word. By verstek gebruik PHP-FPM Unix-voetstukke, so jou luisterinstruksie sal waarskynlik soos volg lyk:
U kan dit verander na enige geldige naam wat u wil hê, maar ek stel weereens voor om by iets soortgelyk aan die konfigurasielêernaam te hou, sodat u dit byvoorbeeld kan stel op:
Goed, stoor dan die lêer en verlaat die teksredigeerder.
Deel 2 – Dateer NGINX virtuele gasheerkonfigurasie op
Nou moet jy die NGINX virtuele gasheerlêer oopmaak met die FastCGI-konfigurasie wat jy na 'n nuwe swembad wil verander - of eerder, koppel aan die nuwe sok.
By verstek op Ubuntu 14.04 word dit onder /etc/nginx/sites-available gestoor, maar kan ook elders gedefinieer word. U weet waarskynlik die beste waar u virtuele gasheerkonfigurasies geleë is ;-)
Maak die relevante konfigurasielêer oop in jou gunsteling teksredigeerder en soek die fastcgi_pass -aanwysing (wat in 'n liggingkonteks moet wees) wat die PHP-FPM-sok definieer. U moet hierdie waarde verander sodat dit ooreenstem met die nuwe PHP-FPM-poelkonfigurasie wat u onder stap een gemaak het, so as u met ons voorbeeld voortgaan, sal u dit verander na:
fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Stoor en maak ook daardie lêer toe. Jy is nou amper klaar.
Deel 3 – Herbegin PHP-FPM en NGINX
Om die konfigurasieveranderinge wat jy aangebring het toe te pas, herbegin beide PHP-FPM en NGINX. Dit kan genoeg wees om te herlaai in plaas van om te herbegin , maar ek vind dit 'n bietjie tref en mis, afhangend van watter instellings verander word. In die spesifieke geval wou ek hê dat die ou PHP-FPM-kinderprosesse dadelik moes sterf, dus was dit nodig om PHP-FPM te herbegin, maar vir NGINX kan 'n herlaai voldoende wees. Probeer dit self.
sudo service nginx restart
En voila, jy is klaar. As jy alles reg gedoen het, behoort die virtuele gasheer wat jy gewysig het nou die nuwe PHP-FPM-poel te gebruik en nie kinderprosesse met enige ander virtuele gashere te deel nie.