我正在尝试创建一个通用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
答案 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代码段,因此从这些代码段访问环境变量是合理的。
如果要这样做,则需要执行以下操作:
请参见Custom Location
instructions here。您需要在root
中设置备用location_include
和Staticfile
。这将引用并指示Nginx处理通过应用程序提供的自定义配置。
指定自定义erb
脚本,而不是指定自定义配置文件。例如:nginx/conf/includes/custom_header.conf.erb
。这应该包含您的配置作为模板,但是您可以引用<%= ENV["MY_VAR"] %>
之类的环境变量。您还可以在erb模板中做其他有效的事情。
location /api { proxy_pass <%= ENV["MY_DEV_PROXY"] %>; }
在应用程序的根目录中添加一个.profile
script。在此脚本中,您将使用erb
处理模板文件并生成实际配置。
erb nginx/conf/includes/custom_header.conf.erb > nginx/conf/includes/custom_header.conf
当您的应用启动时,它将运行此脚本并将您的模板转换为实际的自定义配置。 Nginx然后将加载自定义配置。
希望有帮助!