Cloud Foundry环境变量在nginx.conf中不起作用

时间:2019-02-19 08:39:59

标签: cloudfoundry swisscomdev

我正在尝试创建一个通用nginx.conf,该proxy_pass根据环境而定。{p> 1

我正在使用来自Cloud Foundry 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环境变量得到解决。

相反,将我的应用程序推送到Cloud Foundry时,我得到了:

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 :(得分:0)

如果您使用的是Nginx buildpack,则可以使用文档中的方法来访问环境变量。

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

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


如果使用的是Staticfile buildpack,则不能使用Nginx buildpack中的相同功能(至少在编写本文时)。

Staticfile buildpack为您自动生成大多数/所有Nginx配置,因此从技术上讲您不需要插入任何环境变量。但是,您可以在Staticfile buildpack中包含自定义Nginx代码段,因此从这些代码段访问环境变量是合理的。

如果要这样做,则需要执行以下操作:

  1. 请参见Custom Location instructions here。您需要在root中设置备用location_includeStaticfile。这将引用并指示Nginx处理通过应用程序提供的自定义配置。

  2. 指定自定义erb脚本,而不是指定自定义配置文件。例如:nginx/conf/includes/custom_header.conf.erb。这应该包含您的配置作为模板,但是您可以引用<%= 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然后将加载自定义配置。

希望有帮助!