Переопределение директив php.ini в nginx + php-fpm

Cx2

Новичок
Столкнулся с не очевидной ситуаций при настройке php-fpm.

Например 1:
1.1 указываю список в php.ini disable_functions, phpinfo() их выводит, эти функции не работают, все хорошо.
1.2. очищаю этот список в php-fpm.conf php_admin_value[disable_functions], phpinfo() их не выводит, но функции disable_functions из php.ini по-прежнему остаются запрещены!
1.3. nginx.conf - fastcgi_param PHP_ADMIN_VALUE "disable_functions=" - то же самое, что и в 1.2

Вроде бы прослеживаются приоритеты, но ...

Пример 2
2.1. указываем memory_limit в php-fpm.conf или в nginx.conf = 1k, сразу не хватает памяти, хорошо.
2.2 указываем memory_limit = 1k в php.ini и никаких ошибок нет, значение в phpinfo() - 32M откуда-то.

Объясните как правильно работать с переопределением настроек и как смотреть корректные значения, если выводится неактуальная информация через phpinfo().

версия php 7.2
 

Cx2

Новичок
Да, там написано:
Эта директива должна быть установлена в php.ini. Например, ее нельзя использовать в httpd.conf.
Но в php-fpm или nginx запросто можно добавить (не убавить) запрещенных функций и все работает корректно.
Про httpd.conf вообще отдельная песня, если php подключается как модуль, не знаю как сейчас но раньше disable_functions из php.ini разные значения выдавал в master и local value.

disable_functions выбрана в качестве примера, проблема то не в этой конкретной настройке.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
nginx сам ничего не делает, просто пропихивает это значение в php-fpm.
1.2. очищаю этот список в php-fpm.conf
.
2.2 указываем memory_limit = 1k в php.ini и никаких ошибок нет, значение в phpinfo() - 32M откуда-то.
32M скорее всего указано в настройках конкретного пула php-fpm
 

Cx2

Новичок
В настройках пула точно ничего нет про лимит памяти.

А как быть в такой ситуации, когда настройку можно менять только в php.ini, но при этом нужно иметь разные значения на разных хостах. Опять в качестве примера хорошо подходит disable_functions, как например на одном хосте включить eval, но чтобы при этом нигде больше эта функция не работала.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
В настройках пула точно ничего нет про лимит памяти.

А как быть в такой ситуации, когда настройку можно менять только в php.ini, но при этом нужно иметь разные значения на разных хостах. Опять в качестве примера хорошо подходит disable_functions, как например на одном хосте включить eval, но чтобы при этом нигде больше эта функция не работала.
Мне кажется, самый разумный способ — нужно иметь разные настройки в разных пулах php-fpm.
 

Cx2

Новичок
Я так вчера тоже думал, но перечитав сегодня документацию, думаю не корректно писать в php-fpm пулы то, что только для php.ini.
Но такой вариант работает - факт!
 

флоппик

promotor fidei
Команда форума
Партнер клуба
перечитав сегодня документацию, думаю не корректно писать в php-fpm пулы
Ну, пулы для этого и нужны — разграничивать ресурсы между разными вариантами конфигураций в пределах одной машины.
Собственно, в мануале https://secure.php.net/manual/ru/install.fpm.php так и написано:
возможность запуска воркеров с различными uid/gid/chroot-окружением, а также запуска на различных портах с использованием разных php.ini (замещение safe_mode);
 
  • Like
Реакции: Cx2

Cx2

Новичок
Точно. Тогда опцию через php_admin_value в пуле будет корректно менять если место изменения - Только php.ini?
 

AnrDaemon

Продвинутый новичок
Точно. Тогда опцию через php_admin_value в пуле будет корректно менять если место изменения - Только php.ini?
Не просто корректно, а единственно правильно, если хочешь собрать специфичную для отдельного приложения конфигурацию (в случае, если хост исполняет больше одного приложения).
Но имей в виду, что любую конфигурацию надо тестировать; не все настройки могут быть установлены/изменены на уровне SAPI.
В иных случаях контейнеризация типа Докера может оказаться лучшим решением.
 
  • Like
Реакции: Cx2
Сверху