Переменные среды Cloud Foundry не работают внутри nginx.conf
Я пытаюсь создать общий nginx.conf
это делает proxy_pass
в зависимости от окружающей среды.
Я использую приспособление из облачного литейного завода staticfile-buildpack
https://github.com/cloudfoundry/staticfile-buildpack/tree/master/fixtures/pushstate_and_proxy_pass/
Я хочу установить прокси-проход в зависимости от переменной среды.
Это код файла proxy.conf:
location /api { proxy_pass {{env "MY_DEV_PROXY"}}; }
Я ожидаю, что переменная среды MY_DEV_PROXY, которую я ранее установил, будет разрешена.
Вместо этого, когда я отправляю свое приложение в облачный литейный цех, я получаю:
ERR 2019/02/19 08:18:39 [emerg] 88 # 0: директива proxy_pass не заканчивается символом ";" в /home/vcap/app/nginx/conf/includes/proxy.conf:1
При использовании прямого значения вместо переменной:
location /api { proxy_pass https://my-dev-proxy.com; }
все отлично работает
cf curl /v2/info && cf version:
{
"description": "Cloud Foundry provided by Swisscom",
"min_cli_version": "6.42.0",
"min_recommended_cli_version": "latest",
"api_version": "2.128.0",
"osbapi_version": "2.14",
}
cf version 6.42.0+0cba12168.2019-01-10
1 ответ
Если вы используете пакет сборки Nginx, вы можете использовать метод в документации для доступа к переменным среды.
location /api { proxy_pass {{env "MY_DEV_PROXY"}}; }
https://docs.cloudfoundry.org/buildpacks/nginx/
Если вы используете сборочный пакет Staticfile, вы не можете использовать ту же функцию из сборочного пакета Nginx (по крайней мере, на момент написания).
Сборочный пакет Staticfile автоматически генерирует большую часть / всю конфигурацию Nginx, поэтому вам технически не нужно вставлять переменные окружения. Однако вы можете включать пользовательские фрагменты Nginx в пакет компоновки Staticfile, поэтому разумно хотеть получить доступ к переменным окружения из этих фрагментов.
Если вы хотите сделать это, вам нужно сделать что-то вроде этого:
Увидеть
Custom Location
инструкции здесь. Вам нужно будет установить альтернативуroot
а такжеlocation_include
вStaticfile
, Это будет ссылаться и инструктировать Nginx для обработки пользовательских настроек, которые вы предоставляете через приложение.Вместо указания пользовательских файлов конфигурации, укажите пользовательские
erb
скрипты. Пример:nginx/conf/includes/custom_header.conf.erb
, Это должно содержать вашу конфигурацию в качестве шаблона, но вы можете ссылаться на переменные env, такие как<%= ENV["MY_VAR"] %>
, Вы также можете сделать что-нибудь еще в шаблоне erb.location /api { proxy_pass <%= ENV["MY_DEV_PROXY"] %>; }
Добавить
.profile
скрипт в корень вашего приложения. В этом скрипте вы будете использоватьerb
обработать файл шаблона и сгенерировать актуальную конфигурацию.erb nginx/conf/includes/custom_header.conf.erb > nginx/conf/includes/custom_header.conf
Когда ваше приложение запустится, оно запустит этот скрипт и превратит ваш шаблон в настоящую пользовательскую конфигурацию. Затем Nginx загрузит пользовательский конфиг.
Надеюсь, это поможет!