Настройки PHP для одного сайта: пул PHP-FPM и .user.ini
Настройки в php.ini действуют на все сайты сервера. Для одного сайта есть два способа: отдельный пул PHP-FPM — со своими процессами и настройками, или файл .user.ini в папке сайта — проще, но меняет не всё.
Содержание 7
Какой способ выбрать
| Пул PHP-FPM | Файл .user.ini | |
|---|---|---|
| что меняет | больше настроек, например max_file_uploads | кроме тех, что меняются только в php.ini |
| нужен ли перезапуск | да | нет, действует в течение 5 минут |
| свои процессы и пользователь | да | нет |
| может ли код сайта переписать | нет, с php_admin_value | да, функцией ini_set() — часть настроек |
Где что можно менять — в списке настроек. Команды — для PHP 8.3 из Ubuntu 24.04. В Ubuntu 26.04 стоит PHP 8.5: в путях и командах вместо 8.3 пишите 8.5. Какая версия у вас, покажет ls /etc/php/.
Отдельный пул PHP-FPM
Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне. Вместо shop подставьте короткое имя сайта латиницей.
- Создайте файл пула:
sudo nano /etc/php/8.3/fpm/pool.d/shop.conf. Имя должно заканчиваться на .conf, иначе PHP-FPM его не прочитает. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. - Вставьте строки ниже, поменяйте значения php_admin_value на свои и сохраните: Ctrl+O, Enter, затем Ctrl+X.
- Проверьте настройки:
sudo php-fpm8.3 -t. В ответе должно бытьtest is successful. Если вместо этого ошибка — в ней названа строка с опечаткой. - Перезапустите PHP-FPM:
sudo systemctl restart php8.3-fpm. Если команда ничего не ответила, PHP перезапущен. - Проверьте, что появился сокет:
ls /run/php/. В ответе должен быть php8.3-fpm-shop.sock.
[shop]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm-shop.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
php_admin_value[memory_limit] = 256M
php_admin_value[upload_max_filesize] = 64M
php_admin_value[post_max_size] = 80MСтроки listen.owner и listen.group нужны: без них сокет будет принадлежать root, nginx не сможет к нему подключиться и сайт ответит 502 Bad Gateway. Числа pm — как в пуле www, что они значат.
Как направить сайт в новый пул
- Откройте файл сайта в nginx:
sudo nano /etc/nginx/sites-available/example.com— с именем вашего файла. - Найдите строку fastcgi_pass и замените в ней сокет:
fastcgi_pass unix:/run/php/php8.3-fpm-shop.sock;. - Сохраните файл и проверьте настройки nginx:
sudo nginx -t. В ответе должно бытьtest is successful. - Примените:
sudo systemctl reload nginx.
Проверьте результат через phpinfo(): в колонке Master Value должны быть значения из пула. Процессы пулов складываются: два пула по 5 процессов — это до 10 процессов в памяти. Если памяти мало, поставьте в новом пуле pm = ondemand.
Файл .user.ini
PHP ищет файлы .user.ini в папке выполняемого скрипта и выше — до корня сайта. Создайте файл в корне: sudo nano /var/www/example.com/.user.ini — и впишите строки как в php.ini:
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 80MПерезапуск не нужен: PHP перечитывает .user.ini раз в 300 секунд, то есть изменения вступят в силу в течение 5 минут. Проверьте их через phpinfo() — в колонке Local Value.
Если строка из .user.ini не действует, проверьте пул: настройку, заданную там через php_admin_value, .user.ini не меняет. Найти такие строки: grep -rn 'php_' /etc/php/8.3/fpm/pool.d/. Через php_value — меняет.
nginx не прячет файлы с точкой в начале имени: .user.ini можно открыть по прямой ссылке. Не храните в нём ничего, кроме настроек PHP.
На виртуальном хостинге
Своего пула там нет. Настройки PHP для сайта меняют в панели хостинга, а если такого раздела нет — файлом .user.ini в папке сайта.
Источники
- Справка PHP: файлы .user.ini — читаются только в CGI/FastCGI, к которым относится PHP-FPM; PHP ищет их от папки скрипта до корня сайта и перечитывает раз в 300 секунд.
- Исходный код PHP 8.3.6: fpm_php.c — php_value задаёт значение для пула, php_admin_value вдобавок запрещает менять его в .user.ini и ini_set().
- Справка PHP: настройки PHP-FPM — pm: static, dynamic или ondemand; pm.process_idle_timeout по умолчанию 10 секунд; php_admin_value нельзя переопределить через ini_set().
- Образец php-fpm.conf из PHP 8.3.6 — файлы пулов подключаются строкой include, в Ubuntu — pool.d/*.conf.
- Образец www.conf из PHP 8.3.6 — без listen.owner владелец сокета — пользователь главного процесса; php_admin_value нельзя изменить через ini_set().
- Справка PHP: режимы настроек — INI_PERDIR меняют в php.ini и .user.ini, INI_ALL — где угодно, в том числе функцией ini_set(), INI_SYSTEM — только в php.ini.
- Справка PHP: список настроек — значения по умолчанию и где можно менять каждую настройку: INI_ALL, INI_PERDIR или INI_SYSTEM.
Сверено 14 октября 2026 года.
Что почитать дальше
- Настройки PHPглавные настройки и где их задают.
- Процессы PHP-FPMpm, pm.max_children и память.
- phpinfo()как проверить, с какими настройками работает сайт.
- Где находится php.iniфайлы для сайта и для командной строки.