Гарантування безпеки виконання PHP: експертне налаштування PHP-FPM з NGINX

watch 2m, 6s
views 2

10:15, 19.08.2026

Зміст статті
arrow

  • Як працює PHP-FPM «за лаштунками»
  • Вимоги перед налаштуванням PHP-FPM з NGINX
  • Покрокова інструкція з налаштування PHP-FPM з NGINX
  • Крок 1: Встановлення PHP-FPM на сервері
  • Крок 2: Налаштування пулу PHP-FPM
  • Крок 3: Налаштування NGINX для використання PHP-FPM
  • Крок 4: Перевірка інтеграції PHP-FPM та NGINX
  • Поширені запитання та усунення несправностей
  • Що таке PHP-FPM і навіщо поєднувати його з NGINX?
  • Як правильно налаштувати взаємодію NGINX з PHP-FPM?
  • Коли слід використовувати сокет, а коли — порт у PHP-FPM?
  • Що спричиняє помилку 502 Bad Gateway і як її виправити?
  • Чи можна запускати кілька версій PHP в одній конфігурації NGINX?
  • Де можна знайти налаштування пулу PHP-FPM?
  • Які найкращі практики для підвищення продуктивності PHP-FPM?
  • Підсумки

PHP-FPM — це менеджер процесів, необхідний для обробки веб-запитів. Цей підхід є значно швидшим порівняно з традиційними методами CGI, такими як mod_php або SUPHP. Головною перевагою цього методу є те, що він вимагає менше ресурсів процесора та пам’яті.  

Як працює PHP-FPM «за лаштунками»

Щоб краще зрозуміти, як все працює, давайте розглянемо процес «за лаштунками». Ось основні етапи функціонування системи:

  1. Обробка запиту. Коли сервер отримує запит від PHP-скрипта, він передається через FastCGI до PHP-FPM.
  2. Управління процесами. Після отримання запиту PHP-FPM вибирає з пулу доступний процес для його обробки. Якщо доступних процесів немає, створюється новий.
  3. Можна керувати різними типами процесів, такими як головні та робочі процеси. Головний процес необхідний для прийому поточних запитів та розподілу їх між доступними робочими процесами. Робочий процес необхідний для виконання PHP-скриптів. Вони можуть працювати в різних режимах, таких як статичний, динамічний та «на вимогу».
  4. Виконання. Коли запит надходить до робочого процесу, PHP-скрипт виконується, і на сервер надходить вихідні дані.
  5. Рециркуляція процесу. Робочі процеси можуть бути перезапущені після певної кількості запитів. Це необхідно для запобігання витокам пам’яті

Вимоги перед налаштуванням PHP-FPM з NGINX

-        У вашій системі можна відкрити сеанс SSH з правами користувача sudo або root.

-        Встановлення PHP та NGINX у вашій системі. Якщо це ще не зроблено, існують різні докладні інструкції щодо процесу встановлення.

Покрокова інструкція з налаштування PHP-FPM з NGINX

-        Встановлення PHP-FPM

-        Налаштування пулу PHP-FPM

-        Налаштування NGINX для використання PHP-FPM

-        Перевірка інтеграції PHP-FPM та NGINX

Крок 1: Встановлення PHP-FPM на сервері

Скрипт PHP не може працювати на Nginx, оскільки для ефективного управління необхідний PHP-FPM. PHP-FPM працює поза межами NGINX, створюючи власний процес. Коли користувач намагається зайти на сторінку PHP, сервер передає цей запит до PHP-FPM.

Процес встановлення на Ubuntu залежить від його версії та версії PHP. Переконавшись, що у вас встановлена найновіша версія PHP, ви можете скористатися такою командою для встановлення FPM:

sudo apt install -y php8.2-fpm

Після виконання наведеної вище команди сервер запуститься автоматично після завершення встановлення. Для перевірки скористайтеся наступною командою:

sudo systemctl status php8.2-fpm

Крок 2: Налаштування пулу PHP-FPM

Пул за замовчуванням знаходиться у папці /etc/php/8.2/fpm/pool.d/, яку можна налаштувати відповідно до ваших потреб. Однак більш поширеним підходом є створення окремих пулів для кращого контролю над кожним процесом FPM. Кожен пул матиме свій головний процес, і для кожного PHP-додатка можна налаштувати власний кеш. Це досить зручний підхід, оскільки пули будуть розділені, і будь-які зміни в одному пулі не впливатимуть на інші.

Тепер давайте створимо пул FPM для запуску додатка під окремим користувачем. Для початку створимо нового користувача:

# Створимо системну групу з назвою wordpress

sudo groupadd --system wordpress

# Створимо системного користувача з іменем wordpress, додамо його до групи wordpress і встановимо, щоб у нього не було оболонки для входу

sudo useradd --system --gid wordpress --shell /usr/sbin/nologin --home-dir /var/www/wordpress wordpress

Наступним кроком є перехід до каталогу конфігурації та створення файлу конфігурації за допомогою текстового редактора:

# cd /etc/php/8.2/fpm/pool.d

# vi wordpress_pool.conf

[wordpress_site]

user = wordpress

group = wordpress

listen = /run/php/php8.2-fpm-wordpress.sock

listen.owner = www-data

listen.group = www-data

 

php_admin_value[disable_functions] = exec,passthru,shell_exec,system

php_admin_flag[allow_url_fopen] = off

 

pm = dynamic

pm.max_children = 75

pm.start_servers = 10

pm.min_spare_servers = 5

pm.max_spare_servers = 20

pm.process_idle_timeout = 10s

Давайте розглянемо деякі з вищезазначених значень:

-        [wordpress_site]: тут слід вказати унікальну назву пулу.

-        Користувач/група: вкажіть, під яким обліковим записом працюватиме пул.

-        Listen: ім’я файлу сокета.

-        Listen.owner/group: має збігатися з користувачем/групою NGINX.

-        Admin_value/flag: дозволяє встановлювати власні значення та булеві прапорці.

-        pm: при виборі значення «Dynamic» кількість дочірніх процесів визначається на основі наступних директив.

-        max_children: максимальна кількість дочірніх процесів, які можуть бути активними одночасно.

-        start_servers: кількість дочірніх процесів, що створюються під час запуску.

-         max/min_spare_servers: максимальна та мінімальна кількість дочірніх процесів у стані простою.

-        idle_timeout: максимальна кількість неактивних серверних процесів.

Також можна вибрати статичні налаштування або налаштування «за запитом». У разі вибору статичного варіанту кількість процесів буде фіксованою, а при налаштуванні «за запитом» дочірні процеси будуть запускатися для нових запитів.

Після завершення роботи з файлом конфігурації перезапустіть службу fpm:

sudo systemctl restart php8.2-fpm

Крок 3: Налаштування NGINX для використання PHP-FPM

Наступним кроком є створення блоку сервера NGINX. Для цього необхідно відредагувати файл конфігурації NGINX і додати шлях до файлу сокета пулу за допомогою fastcgi_pass наступним чином:

location ~ \.php$ {

    fastcgi_split_path_info ^(.+\.php)(/.+)$;

    fastcgi_pass unix:/run/php/php8.2-fpm-wordpress.sock;

    fastcgi_index index.php;

    include fastcgi.conf;

}

Після цього перезапустіть NGINX:

sudo nginx -t

sudo systemctl reload nginx

Крок 4: Перевірка інтеграції PHP-FPM та NGINX

Щоб перевірити, чи конфігураційний файл дійсно використовує новий пул, потрібно створити файл php.info в кореневому каталозі.

# Перейдіть до каталогу WordPress

cd /var/www/html/wordpress

# Створіть файл PHP info з використанням безпечних лапок

echo '<?php phpinfo(); ?>' | sudo tee info.php > /dev/null

Після створення інформаційної сторінки перевірте значення; якщо вони збігаються з тими, що ви вказали у файлі конфігурації FPM, то все працює як передбачено.

Поширені запитання та усунення несправностей

Що таке PHP-FPM і навіщо поєднувати його з NGINX?

PHP-FPM — це диспетчер процесів, необхідний для управління процесами PHP. У поєднанні з NGINX він може значно покращити безпеку, продуктивність та управління ресурсами.

Як правильно налаштувати взаємодію NGINX з PHP-FPM?

Для цього необхідно налаштувати NGINX на використання PHP-FPM. Це можна зробити, включивши директиву `fastcgi_pass` у файл конфігурації. Це можна зробити наступним чином:

location ~ \.php$ {

fastcgi_split_path_info ^(.+\.php)(/.+)$;

fastcgi_pass unix:/run/php/php8.2-fpm-wordpress.sock;

fastcgi_index index.php;

include fastcgi.conf;

}

Коли слід використовувати сокет, а коли — порт у PHP-FPM?

Використання сокетів дає можливість швидшої комунікації, оскільки немає потреби в мережевих накладних витратах. Порт потребує мережевої взаємодії, і такий підхід є значно повільнішим. Проте використання порту доцільне в тих випадках, коли FPM працює на різних контейнерах або серверах.

Що спричиняє помилку 502 Bad Gateway і як її виправити?

Щоб виправити цю помилку, необхідно перевірити, чи працює FPM і чи правильно вказано TCP або сокет у конфігурації NGINX. Перегляньте журнали FPM на наявність проблем і відповідно змініть налаштування пулу. Також перевірте, чи конфігурація NGINX правильно передає запити PHP.

Щоб перевірити журнали, скористайтеся такою командою:

tail -f /var/log/php8.2-fpm.log

Чи можна запускати кілька версій PHP в одній конфігурації NGINX?

Звісно, це можна зробити, налаштувавши окремі пули та вказавши відповідний пул для кожного домену/субдомену. Наприклад, якщо ви використовуєте PHP 7.4 та 7.2, це можливо. Після цього вкажіть відповідний пул для кожного домену. 

Де можна знайти налаштування пулу PHP-FPM?

Зазвичай пул розташований у /etc/php/8.2/fpm/pool.d/.

Які найкращі практики для підвищення продуктивності PHP-FPM?

Для кращої продуктивності, можливо, доведеться налаштувати параметри pm.min_spare_servers, pm.max_children та pm.start_servers у конфігурації. Також можна спробувати увімкнути параметри pm.status_path та pm.max_requests.

Підсумки

У цій статті ми на практиці продемонстрували, як налаштувати окремі пули, встановити PHP-FPM, налаштувати блок сервера NGINX та підключитися до служби. Завдяки такому підходу можна забезпечити кращу масштабованість, безпеку та покращити показники продуктивності. Тепер ви знаєте, як найоптимальніше розподіляти ресурси сервера.

Поділитися

Чи була ця стаття корисною для вас?

Популярні пропозиції VPS

-10%

CPU
CPU
4 Epyc Cores
RAM
RAM
4 GB
Space
Space
50 GB NVMe
Bandwidth
Bandwidth
Unlimited
KVM-NVMe 4096 Linux

16.45

При оплаті за рік

-10%

CPU
CPU
6 Xeon Cores
RAM
RAM
8 GB
Space
Space
100 GB SSD
Bandwidth
Bandwidth
Unlimited
KVM-SSD 8192 Linux

25.85

При оплаті за рік

-10%

CPU
CPU
6 Xeon Cores
RAM
RAM
8 GB
Space
Space
100 GB SSD
Bandwidth
Bandwidth
Unlimited
MT5 KVM 8192 Windows

29.99

При оплаті за рік

-7.3%

CPU
CPU
3 Xeon Cores
RAM
RAM
1 GB
Space
Space
40 GB HDD
Bandwidth
Bandwidth
300 Gb
KVM-HDD HK 1024 Linux

4.86

При оплаті за рік

-10%

CPU
CPU
6 Epyc Cores
RAM
RAM
8 GB
Space
Space
100 GB NVMe
Bandwidth
Bandwidth
Unlimited
KVM-NVMe 8192 Linux

26.35

При оплаті за рік

-15.6%

CPU
CPU
2 Xeon Cores
RAM
RAM
512 MB
Space
Space
10 GB SSD
Bandwidth
Bandwidth
1 TB
KVM-SSD 512 Metered Linux

5.33

При оплаті за рік

-10%

CPU
CPU
10 Epyc Cores
RAM
RAM
64 GB
Space
Space
400 GB NVMe
Bandwidth
Bandwidth
Unlimited
KVM-NVMe 65536 Linux

135.49

При оплаті за рік

-10%

CPU
CPU
10 Xeon Cores
RAM
RAM
64 GB
Space
Space
300 GB SSD
Bandwidth
Bandwidth
Unlimited
KVM-SSD 65536 Linux

134.99

При оплаті за рік

-10%

CPU
CPU
8 Xeon Cores
RAM
RAM
32 GB
Space
Space
200 GB SSD
Bandwidth
Bandwidth
12 TB
KVM-SSD 32768 Metered Linux

150

При оплаті за рік

-10%

CPU
CPU
4 Xeon Cores
RAM
RAM
2 GB
Space
Space
30 GB SSD
Bandwidth
Bandwidth
Unlimited
10Ge-KVM-SSD 2048 Linux

30.3

При оплаті за рік

Інші статті на цю тему

cookie

Чи приймаєте ви файли cookie та політику конфіденційності?

Ми використовуємо файли cookie, щоб забезпечити вам найкращий досвід роботи на нашому сайті. Якщо ви продовжуєте користуватися сайтом, не змінюючи налаштувань, вважайте, що ви згодні на отримання всіх файлів cookie на сайті HostZealot.