Nginx не выполняет PHP сам — он передаёт запросы процессу PHP-FPM через Unix-сокет. В стандартных репозиториях версия PHP своя для каждой системы:
| Система | Версия PHP | Сокет |
|---|---|---|
| Ubuntu 24.04 | 8.3 | /run/php/php8.3-fpm.sock |
| Ubuntu 22.04 | 8.1 | /run/php/php8.1-fpm.sock |
| Debian 12 | 8.2 | /run/php/php8.2-fpm.sock |
Установка
$ apt update$ apt install -y php-fpm php-cli php-mysql php-curl php-mbstring php-xml php-zip php-gd php-intlУзнайте установленную версию и сохраните её в переменную — дальше команды используют её:
$ PHP=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')$ echo $PHP$ systemctl enable --now php$PHP-fpm$ ls /run/php/Настройка Nginx
root /var/www/example.com;index index.php index.html;location / { try_files $uri $uri/ /index.php?$args;}location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.3-fpm.sock;}location ~ /\.(ht|git) { deny all;}$ echo '<?php phpinfo();' > /var/www/example.com/info.php$ nginx -t && systemctl reload nginx$ curl -s http://example.com/info.php | grep -m1 'PHP Version'$ rm /var/www/example.com/info.phpЛимиты php.ini
Настройки для FPM лежат в /etc/php/ВЕРСИЯ/fpm/php.ini. Чаще всего меняют размер загрузок и лимит памяти:
upload_max_filesize = 32Mpost_max_size = 32Mmemory_limit = 256Mmax_execution_time = 60Если увеличили upload_max_filesize, поднимите и client_max_body_size в Nginx — иначе запрос отрежет раньше, чем он дойдёт до PHP.
Пул процессов
Количество воркеров задаётся в /etc/php/ВЕРСИЯ/fpm/pool.d/www.conf. Ориентир для pm.max_children — свободная память, делённая на средний размер процесса PHP (столбец RSS в выводе ps -o rss,cmd -C php-fpm8.3).
pm = dynamicpm.max_children = 10pm.start_servers = 3pm.min_spare_servers = 2pm.max_spare_servers = 5$ php-fpm$PHP -t && systemctl reload php$PHP-fpmЧастые ошибки
- 502 Bad Gateway — путь к сокету в Nginx не совпадает с реальной версией PHP (
ls /run/php/). - Браузер скачивает .php вместо выполнения — нет блока для .php или сайт открывается другим server block.
- В журнале «server reached pm.max_children» — воркеров не хватает. Увеличьте лимит, если позволяет память, или ищите медленные запросы.