
Для корректной работы PHP с Nginx необходимо использовать PHP-FPM (FastCGI Process Manager), который обеспечивает обработку запросов через сокеты или TCP-порты. Оптимальная конфигурация предполагает использование UNIX-сокета для локального сервера, например /run/php/php8.2-fpm.sock, что снижает накладные расходы на соединение по TCP.
В Nginx требуется правильно настроить блок server и указать обработку PHP-файлов через директиву location ~ \.php$, где необходимо прописать fastcgi_pass unix:/run/php/php8.2-fpm.sock; или альтернативно TCP-адрес 127.0.0.1:9000. Важно также передавать параметры окружения через fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;, чтобы PHP правильно определял путь к файлам.
Дополнительно рекомендуется проверить права доступа к сокету PHP-FPM и корректность пользователя и группы в конфигурации, чтобы Nginx имел разрешение на чтение и запись. Настройка listen.owner и listen.group в php-fpm.conf существенно влияет на производительность и безопасность сервера.
После внесения изменений необходимо перезапустить сервисы: systemctl restart php8.2-fpm и systemctl reload nginx. Для диагностики используют phpinfo() или проверку через nginx -t, чтобы убедиться в отсутствии синтаксических ошибок в конфигурации.
Установка PHP и необходимых модулей для работы с Nginx

На сервере с Ubuntu 22.04 установка PHP для работы с Nginx начинается с добавления официального репозитория PHP и обновления списка пакетов:
sudo apt update && sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
Для Nginx используется PHP-FPM, обеспечивающий обработку PHP через FastCGI. Установка выполняется командой:
sudo apt install php8.2-fpm
Необходимые модули зависят от используемых приложений. Наиболее часто требуются:
| Модуль | Назначение |
|---|---|
| php8.2-mysql | Работа с базой данных MySQL/MariaDB |
| php8.2-curl | Отправка HTTP-запросов из PHP |
| php8.2-gd | Обработка изображений |
| php8.2-mbstring | Поддержка многобайтовых строк |
| php8.2-xml | Обработка XML и RSS |
| php8.2-zip | Работа с архивами |
| php8.2-bcmath | Расчеты с произвольной точностью |
Установка дополнительных модулей выполняется одной командой:
sudo apt install php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip php8.2-bcmath
После установки необходимо проверить, что PHP-FPM запущен:
sudo systemctl status php8.2-fpm
При необходимости включения модулей и изменений конфигурации следует редактировать основной файл /etc/php/8.2/fpm/php.ini, а затем перезапустить сервис:
sudo systemctl restart php8.2-fpm
Версия PHP и активные модули проверяются командой:
php -m && php -v
Конфигурация PHP-FPM для обработки запросов Nginx

Для интеграции PHP с Nginx используется PHP-FPM (FastCGI Process Manager). Основной файл конфигурации находится по пути /etc/php/8.1/fpm/pool.d/www.conf (путь зависит от версии PHP и дистрибутива).
Ключевые параметры, требующие настройки:
listen = /run/php/php8.1-fpm.sock– указывает Unix-сокет для связи с Nginx. Альтернатива: TCP-порт127.0.0.1:9000.listen.ownerиlisten.group– владельцы сокета, обычноwww-data, чтобы Nginx имел доступ.listen.mode = 0660– права доступа к сокету.pm = dynamic– тип управления процессами. Для высоконагруженных сайтов оптимальнееpm = ondemandс быстрым масштабированием.pm.max_children– максимальное количество процессов. Рекомендуется 2–4 на ядро CPU для сайтов средней нагрузки.pm.start_servers,pm.min_spare_servers,pm.max_spare_servers– настройки дляdynamic, корректировать исходя из пиковых нагрузок.php_admin_value[memory_limit] = 256M– лимит памяти на один процесс, можно увеличить для ресурсоёмких приложений.php_admin_value[upload_max_filesize]иphp_admin_value[post_max_size]– ограничение размера загружаемых файлов.
После изменений конфигурации необходимо перезапустить PHP-FPM:
sudo systemctl restart php8.1-fpm
Для корректной работы с Nginx в конфигурации виртуального хоста указывают путь к сокету или порту PHP-FPM:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
Дополнительно рекомендуется включить:
access.log = /var/log/php-fpm/access.logиerror_log = /var/log/php-fpm/error.log– отдельные логи для мониторинга.
Проверка статуса PHP-FPM:
sudo systemctl status php8.1-fpm
Настройка PHP-FPM под конкретное приложение позволяет контролировать использование ресурсов и обеспечивает стабильную обработку запросов Nginx без перегрузок и ошибок 502 Bad Gateway.
Настройка блока server в Nginx для передачи PHP-запросов

Для обработки PHP-запросов в Nginx требуется корректная конфигурация блока server. Основной элемент – директива location ~ \.php$, которая определяет правила обработки файлов с расширением .php.
Пример минимальной конфигурации блока server для PHP:
server {
listen 80;
server_name example.com;
root /var/www/example.com;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Обязательные элементы:
fastcgi_passуказывает на сокет PHP-FPM. Для TCP-соединения это будет127.0.0.1:9000.fastcgi_param SCRIPT_FILENAMEформирует полный путь к скрипту, который передается PHP-FPM.include fastcgi_paramsзагружает стандартные параметры FastCGI для корректной работы PHP.try_files $uri $uri/ =404предотвращает передачу несуществующих файлов PHP на обработку.
Для безопасности рекомендуется ограничить обработку PHP только файлами из корневой директории сайта, исключив обработку скриптов из /uploads или других пользовательских директорий.
После изменения конфигурации нужно проверить синтаксис командой nginx -t и перезапустить сервис systemctl reload nginx для применения изменений.
Проверка корректной работы PHP через Nginx
Создайте в корне веб-сервера файл info.php с содержимым:
<?php phpinfo(); ?>
Убедитесь, что файл находится в директории, указанной в root в конфигурации Nginx. Например, если root /var/www/html;, файл должен лежать в /var/www/html/info.php.
Проверьте, что блок location ~ \.php$ в конфигурации Nginx правильно направляет запросы к PHP-FPM через fastcgi_pass. Пример корректного блока:
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
После внесения изменений выполните проверку конфигурации командой:
sudo nginx -t
Перезапустите Nginx:
sudo systemctl restart nginx
В браузере откройте http://ваш_домен/info.php. Страница должна отображать таблицу с настройками PHP. Если появляются ошибки 502 или пустая страница, проверьте статус PHP-FPM:
sudo systemctl status php8.2-fpm
Также убедитесь, что сокет или порт PHP-FPM соответствует указанному в fastcgi_pass, и права доступа позволяют Nginx читать сокет. После успешного отображения phpinfo() файл info.php рекомендуется удалить для безопасности.
Решение типичных ошибок при взаимодействии Nginx и PHP

Ошибка 502 Bad Gateway чаще всего возникает из-за некорректного сокета PHP-FPM. Проверьте, что в конфигурации Nginx параметр fastcgi_pass соответствует пути сокета, указанного в www.conf PHP-FPM, например: fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;. После изменения перезапустите оба сервиса: systemctl restart php8.2-fpm и systemctl restart nginx.
Если возникает ошибка 504 Gateway Timeout, увеличьте значения fastcgi_read_timeout в конфигурации Nginx. Стандартное значение 60 секунд часто недостаточно для тяжёлых скриптов. Например: fastcgi_read_timeout 180;.
Ошибка 403 Forbidden может быть связана с правами доступа к сокету PHP-FPM. Убедитесь, что пользователь, под которым работает Nginx, имеет права на чтение и запись сокета. В www.conf проверьте параметры listen.owner, listen.group и listen.mode. Обычно: listen.owner = www-data, listen.group = www-data, listen.mode = 0660.
Если PHP не обрабатывает файлы с определёнными расширениями, убедитесь, что в конфигурации Nginx добавлен блок location ~ \.php$ с корректными директивами fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; и include fastcgi_params;. Ошибки часто появляются при неправильном указании $document_root.
Проблемы с загрузкой больших файлов решаются изменением параметров post_max_size и upload_max_filesize в php.ini, а также увеличением client_max_body_size в Nginx. Например: client_max_body_size 100M; и upload_max_filesize = 100M.
Логи ошибок Nginx и PHP-FPM – ключ к диагностике. Проверяйте /var/log/nginx/error.log и /var/log/php8.2-fpm.log для точного указания причины сбоя. Часто сообщения указывают на неверные пути к файлам или превышение таймаутов.
Оптимизация параметров PHP-FPM для нагрузки сервера

Для повышения производительности PHP-FPM необходимо корректно настроить параметры пула процессов. Основные параметры находятся в файле www.conf или аналогичном конфигурационном файле пула.
pm определяет метод управления процессами. Рекомендуется использовать dynamic для сайтов с переменной нагрузкой. Для высоконагруженных проектов лучше ondemand, чтобы процессы создавались по необходимости.
pm.max_children устанавливает максимальное количество одновременно работающих процессов. Значение рассчитывается как RAM, выделенная на PHP / средний объем памяти на один процесс. Например, при 2 ГБ RAM и 50 МБ на процесс: 2048 / 50 ≈ 40.
pm.start_servers задает количество процессов при запуске PHP-FPM. Для dynamic рекомендуется около 30–50% от pm.max_children.
pm.min_spare_servers и pm.max_spare_servers контролируют минимальное и максимальное количество простаивающих процессов. Поддержание 20–30% свободных процессов снижает задержки при резком увеличении запросов.
pm.process_idle_timeout важен для ondemand. Значение 10–20 секунд позволяет завершать неиспользуемые процессы без риска перегрузки сервера.
request_terminate_timeout ограничивает время выполнения скрипта. Рекомендуется выставлять 30–60 секунд, чтобы длинные запросы не блокировали ресурсы.
Для мониторинга нагрузки PHP-FPM используйте status_path в конфигурации и инструменты вроде PHP-FPM status page или Netdata. На основе статистики корректируйте pm.max_children и параметры пула.
Настройка opcache также снижает нагрузку: opcache.memory_consumption = 256, opcache.max_accelerated_files = 20000, opcache.validate_timestamps = 1. Эти значения ускоряют повторное выполнение скриптов и уменьшают количество создаваемых процессов.
Вопрос-ответ:
Как правильно установить PHP-FPM на сервер с Nginx?
На серверах с Linux установка PHP-FPM выполняется через пакетный менеджер. На Debian или Ubuntu команда выглядит как `sudo apt install php-fpm`, на CentOS и RHEL — `sudo yum install php-fpm`. После установки следует запустить службу через `systemctl start php-fpm` и включить автозапуск командой `systemctl enable php-fpm`. Настройки PHP можно изменить в файле `/etc/php/8.1/fpm/php.ini`, например, чтобы отключить `cgi.fix_pathinfo` для повышения безопасности.
Какие изменения нужно внести в конфигурацию Nginx, чтобы PHP обрабатывался через PHP-FPM?
В конфигурации Nginx создают или редактируют серверный блок `server`. Внутри него добавляют блок `location ~ \.php$ { … }`, где указывают путь к сокету PHP-FPM, например: `fastcgi_pass unix:/run/php/php8.1-fpm.sock;`. Также подключают стандартные параметры через `include fastcgi_params;` и задают `fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;`. После внесения изменений сервер перезапускают командой `systemctl reload nginx`.
Почему при подключении PHP через Nginx возникает ошибка 502 Bad Gateway?
Ошибка 502 сигнализирует о том, что Nginx не может получить ответ от PHP-FPM. Чаще всего проблема связана с тем, что служба PHP-FPM не запущена (`systemctl status php-fpm`) или путь к сокету в конфигурации Nginx указан неверно. Иногда ошибка возникает из-за неправильных прав на сокет или несовпадения пользователя. После исправления параметров PHP-FPM и Nginx службы необходимо перезапустить.
Как проверить, что PHP работает через Nginx корректно?
Для проверки создают файл `info.php` в корневой директории сайта со строкой ``. Если при открытии этого файла в браузере отображается страница с информацией о PHP, значит настройка выполнена правильно. Если страница не открывается, проверяют логи Nginx (`/var/log/nginx/error.log`) и PHP-FPM (`/var/log/php8.1-fpm.log`) и корректируют конфигурацию.
Можно ли использовать несколько версий PHP на одном сервере с Nginx?
Да, это возможно. Для каждой версии PHP устанавливают отдельный PHP-FPM с отдельным сокетом или портом. В конфигурации Nginx для конкретного сайта указывают нужный сокет, например: `fastcgi_pass unix:/run/php/php7.4-fpm.sock` или `fastcgi_pass unix:/run/php/php8.1-fpm.sock`. Такой подход позволяет запускать разные сайты с разными версиями PHP на одном сервере без конфликтов.
Как правильно настроить обработку PHP через Nginx на сервере?
Для работы PHP с Nginx нужно убедиться, что установлен PHP-FPM и активен соответствующий сокет или порт. В конфигурации Nginx необходимо указать блок server с директивами root для корневой директории сайта и index для файлов по умолчанию. Внутри location блока для PHP файлов прописывают обработку через fastcgi_pass, обычно указывая сокет PHP-FPM, например unix:/run/php/php8.1-fpm.sock, и передают параметры SCRIPT_FILENAME через fastcgi_param. После внесения изменений конфигурацию Nginx проверяют командой nginx -t и перезапускают сервис, чтобы новые настройки вступили в силу. Проверить работу можно через небольшой PHP-файл с phpinfo().
