Како да поставите посебни PHP-FPM базени во NGINX
Објавено: 5 март 2025, во 19:54:59 UTC
Последно ажурирано: 12 јануари 2026, во 08:30:29 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“ со како и да сакате да се вика вашиот базен.
Сега отворете ја новата датотека користејќи nano или кој било друг уредувач на текст што го претпочитате и прилагодете ја за да одговара на вашата намена. Веројатно ќе сакате да ги прилагодите броевите на подредените процеси и евентуално под кој корисник и група работи базенот, но двете поставки што апсолутно мора да ги промените се името на базенот и сокетот на кој слуша, во спротивно ќе дојде во конфликт со постоечкиот базен и работите ќе престанат да работат.
Името на базенот е близу до врвот на датотеката, затворено во квадратни загради. Стандардно е [www]. Променете го ова во што сакате; предлагам истото како што ја именувавте конфигурациската датотека, па за доброто на овој пример променете го во [mypool]. Ако не го промените, се чини дека PHP-FPM ќе ја вчита само првата конфигурациска датотека со тоа име, што веројатно ќе ги наруши работите.
Потоа треба да го промените сокетот или адресата што ја слушате, што е дефинирано од директивата listen. Стандардно, PHP-FPM користи Unix сокети, па затоа вашата директива listen веројатно ќе изгледа вака:
Можете да го промените во кое било валидно име што го сакате, но повторно, предлагам да се држите до нешто слично на името на конфигурациската датотека, па на пример можете да го поставите на:
Добро, тогаш зачувајте ја датотеката и излезете од уредникот на текст.
Дел 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
И готово. Ако сè сте направиле правилно, виртуелниот хост што го изменивте сега треба да го користи новиот PHP-FPM базен и да не споделува подпроцеси со други виртуелни хостови.
