Як налаштувати окремі пули PHP-FPM у NGINX
Опубліковано: 15 лютого 2025 р. о 11:53:09 UTC
Останнє оновлення: 12 січня 2026 р. о 08:30:09 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 і не використовувати спільні дочірні процеси з іншими віртуальними хостами.
