Передайте переменные окружения в PHP CLI и FPM
Я хочу использовать переменные окружения в моих приложениях PHP как CLI, так и FPM. Что я делаю, так это я:
- экспортировать некоторые переменные в
/etc/environment
, - настроить оба
php.ini
(CLI и FPM) дляvariables_order = "EGPCS"
, - настроить FPM
www.conf
вclear_env = no
Я ожидаю, что переменные среды доступны как в CLI, так и в приложении FPM. На самом деле это работает только для CLI. FPM-х $_ENV
не содержит этих переменных среды.
Я заметил, что можно определить переменные среды в www.conf
но это неудобно, так как я должен скопировать и вставить все переменные из /etc/environment
и всегда держите два файла в синхронизации.
Вопрос в том, можно ли передать все переменные окружения непосредственно в приложение PHP-FPM без их копирования в www.conf
?
1 ответ
Из документов:
По умолчанию nginx удаляет все переменные окружения, унаследованные от его родительского процесса, кроме переменной TZ.
Как вы упомянули, вы пытались установить их в конфиге fastcgi, что, я думаю, лучшее, что вы можете сделать в этой ситуации. Для пользы других это делается так:
location ~ \.php$ {
# ...
fastcgi_param APPLICATION_ENV "production";
fastcgi_param MY_OTHER_ENV "things";
include fastcgi_params;
# ...
}
Я понимаю отвращение к "копировать-вставить" и согласен! Вам следует рассмотреть возможность использования инструментов управления конфигурацией, таких как Puppet, SaltStack, Ansible, для управления файлами конфигурации. Таким образом, вы можете легко синхронизировать список переменных среды между всеми необходимыми местоположениями. Дайте мне знать, если вам нужно больше информации об этом.