Передайте переменные окружения в 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, для управления файлами конфигурации. Таким образом, вы можете легко синхронизировать список переменных среды между всеми необходимыми местоположениями. Дайте мне знать, если вам нужно больше информации об этом.

Другие вопросы по тегам