Переменные среды Cloud Foundry не работают внутри nginx.conf - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь создать универсальный nginx.conf, который выполняет proxy_pass в зависимости от среды.

Я использую приспособление из облачного литейного завода staticfile-buildpack

https://github.com/cloudfoundry/staticfile-buildpack/tree/master/fixtures/pushstate_and_proxy_pass/

Я хочу установить прокси-пароль в зависимости от переменной среды.

Это код прокси.conf:

location /api { proxy_pass {{env "MY_DEV_PROXY"}}; }

Iожидайте, что переменная среды 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 версия:

{ "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 Ответ

0 голосов
/ 02 марта 2019

Если вы используете пакет сборки Nginx, вы можете использовать метод в документах для доступа к переменным среды.

location /api { proxy_pass {{env "MY_DEV_PROXY"}}; }

https://docs.cloudfoundry.org/buildpacks/nginx/#env


Если выиспользуя сборочный пакет Staticfile, вы не можете использовать ту же функцию из сборочного пакета Nginx (по крайней мере, на момент написания).

Пакет компоновки Staticfile автоматически генерирует большинство / все конфигурации Nginx для вас, поэтому вам технически не нужно вставлять какие-либо переменные окружения.Однако вы можете включать пользовательские фрагменты Nginx в пакет компоновки Staticfile, поэтому разумно хотеть получить доступ к переменным окружения из этих фрагментов.

Если вы хотите сделать это, вам нужно сделать что-то вроде этого:

  1. См. Custom Location инструкции здесь .Вам нужно будет установить альтернативу root и location_include в Staticfile.Это будет ссылаться и указывать Nginx обрабатывать пользовательские настройки, которые вы предоставляете через приложение.

  2. Вместо указания пользовательских файлов конфигурации укажите пользовательские сценарии erb.Пример: nginx/conf/includes/custom_header.conf.erb.Он должен содержать вашу конфигурацию в качестве шаблона, но вы можете ссылаться на переменные env, например <%= ENV["MY_VAR"] %>.Вы также можете сделать что-нибудь еще в шаблоне erb.

    location /api { proxy_pass <%= ENV["MY_DEV_PROXY"] %>; }
    
  3. Добавить .profile script в корень вашего приложения.В этом сценарии вы будете использовать erb для обработки файла шаблона и создания фактической конфигурации.

    erb nginx/conf/includes/custom_header.conf.erb > nginx/conf/includes/custom_header.conf
    

    Когда ваше приложение запустится, оно запустит этот сценарий и превратит ваш шаблон в фактическую пользовательскую конфигурацию.,Затем Nginx загрузит пользовательскую конфигурацию.

Надеюсь, это поможет!

...