Как да настроите отделни PHP-FPM пулове в NGINX
Публикувано: 15 февруари 2025 г. в 11:49:11 ч. 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 ще зареди само първия конфигурационен файл с това име, което вероятно ще счупи нещата.
След това трябва да промените гнездото или адреса, който слушате, което се определя от директивата за слушане . По подразбиране 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
И воала, готови сте. Ако сте направили всичко правилно, виртуалният хост, който сте променили, сега трябва да използва новия PHP-FPM пул и да не споделя дъщерни процеси с други виртуални хостове.