Как да настроите отделни PHP-FPM пулове в NGINX
Публикувано: 15 февруари 2025 г. в 11:49:11 ч. UTC
Последна актуализация: 12 януари 2026 г. в 8:29:52 ч. 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 пул и да не споделя дъщерни процеси с други виртуални хостове.
