Како да поставите посебни PHP-FPM базени во NGINX
Објавено: 5 март 2025, во 19:54:59 UTC
Во оваа статија, ги разгледувам чекорите за конфигурација потребни за да се стартуваат повеќе PHP-FPM базени и да се поврзе NGINX со нив преку FastCGI, овозможувајќи раздвојување на процесите и изолација помеѓу виртуелните домаќини.
How to Set Up Separate PHP-FPM Pools in NGINX
Информациите во овој пост се засноваат на NGINX 1.4.6 и PHP-FPM 5.5.9 кои работат на Ubuntu Server 14.04 x64. Може или не може да важи за други верзии. (Ажурирање: можам да потврдам дека од Ubuntu Server 24.04, PHP-FPM 8.3 и NGINX 1.24.0, сите инструкции во оваа објава сè уште работат)
Има голем број на предности за поставување на повеќе PHP-FPM детски процесни базени наместо да работи сè во истиот базен. Безбедноста, одвојувањето/изолацијата и управувањето со ресурсите се на ум како неколку главни.
Без оглед на тоа која е вашата мотивација, овој пост ќе ви помогне да го направите тоа :-)
Дел 1 – Поставете нов PHP-FPM базен
Прво, треба да го лоцирате директориумот каде што PHP-FPM ги складира своите конфигурации на базенот. На Ubuntu 14.04, ова е стандардно /etc/php5/fpm/pool.d. Веројатно веќе постои датотека наречена www.conf , која ја содржи конфигурацијата за стандардниот базен. Ако не сте ја погледнале таа датотека порано, веројатно е дека треба да ја поминете и да ги измените поставките во неа за вашето поставување, бидејќи стандардните се за прилично недоволно моќен сервер, но засега само направете копија од неа за да не треба да почнуваме од нула:
Се разбира, заменете го „mypool“ со како што сакате да се вика вашиот базен.
Сега отворете ја новата датотека користејќи нано или кој било уредувач на текст што го сакате и прилагодете го за да одговара на вашата цел. Веројатно ќе сакате да ги прилагодите броевите за обработка на детето и евентуално под кој корисник и група работи базенот, но двете поставки кои апсолутно мора да ги промените се името на базенот и штекерот што го слуша, во спротивно ќе дојде во конфликт со постоечкиот базен и работите ќе престанат да работат.
Името на базенот е блиску до врвот на датотеката, затворено во квадратни загради. Стандардно тоа е [www] . Променете го ова на што сакате; Го предлагам истото како што ја нарековте датотеката за конфигурација, па заради овој пример сменете ја во [mypool] . Ако не го промените, се чини дека PHP-FPM ќе ја вчита само првата конфигурациска датотека со тоа име, што веројатно ќе ги разбие работите.
Потоа треба да го промените приклучокот или адресата што ја слушате, што е дефинирано со директивата за слушање . Стандардно, PHP-FPM користи Unix сокети, така што вашата директива за слушање веројатно ќе изгледа вака:
Можете да го промените во кое било валидно име што сакате, но повторно, предлагам да се држите со нешто слично на името на конфигурациската датотека, за да можете на пример да го поставите на:
Во ред, тогаш, зачувајте ја датотеката и излезете од уредувачот на текст.
Дел 2 – Ажурирајте ја конфигурацијата на виртуелниот домаќин на NGINX
Сега треба да ја отворите датотеката за виртуелен домаќин NGINX со конфигурацијата FastCGI што сакате да ја промените во нов базен - или подобро, да се поврзете со новиот приклучок.
Стандардно на Ubuntu 14.04, тие се зачувани под /etc/nginx/sites-available, но исто така може да се дефинираат на друго место. Веројатно најдобро знаете каде се наоѓаат конфигурациите на вашиот виртуелен хост ;-)
Отворете ја соодветната конфигурациска датотека во вашиот омилен уредувач на текст и побарајте ја директивата fastcgi_pass (која мора да биде во контекст на локација) што го дефинира приклучокот PHP-FPM. Мора да ја промените оваа вредност за да се совпадне со новата конфигурација на базенот PHP-FPM што ја направивте во првиот чекор, така што продолжувајќи го нашиот пример, би го промениле ова во:
fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Потоа зачувајте ја и затворете ја и таа датотека. Сега речиси сте готови.
Дел 3 – Рестартирајте ги PHP-FPM и NGINX
За да ги примените промените во конфигурацијата што сте ги направиле, рестартирајте ги и PHP-FPM и NGINX. Можеби е доволно да се вчита повторно наместо да се рестартира , но сметам дека е малку погоден и промашен, во зависност од тоа кои поставки се сменети. Во конкретниот случај, сакав старите PHP-FPM-детски процеси да умрат веднаш, па затоа беше потребно рестартирање на PHP-FPM, но за NGINX може да биде доволно повторно вчитување. Пробајте го сами.
sudo service nginx restart
И Voila, ќе завршиш. Ако сте направиле сè правилно, виртуелниот хост што го изменивте сега треба да го користи новиот базен PHP-FPM и да не споделува детски процеси со други виртуелни хостови.