Як налаштувати окремі пули PHP-FPM у NGINX
Опубліковано: 15 лютого 2025 р. о 11:53: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 завантажить лише перший файл конфігурації з таким ім'ям, що, швидше за все, зламає речі.
Потім вам потрібно змінити сокет або адресу, яку ви слухаєте, яка визначається директивою прослуховування . За замовчуванням, 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 і не ділитися дочірніми процесами з будь-якими іншими віртуальними хостами.