Docker 让nginx根据环境变量在响应上设置头

Docker 让nginx根据环境变量在响应上设置头,docker,nginx,Docker,Nginx,我使用一个简单的Nginx docker容器来提供一些静态文件。我使用Kubernetes将此容器部署到不同的环境(例如,暂存、生产等),Kubernetes在容器上设置了一个环境变量(比如FOO\u COUNT) 让Nginx在每个响应上传递FOO\u COUNT值作为头,而不必为每个环境构建不同的容器,最简单的方法是什么?开箱即用,Nginx不支持大多数配置块中的环境变量。但是,你可以使用 只需在名为的nginx容器中创建一个可用的配置模板,例如/etc/nginx/conf.d/mysit

我使用一个简单的Nginx docker容器来提供一些静态文件。我使用Kubernetes将此容器部署到不同的环境(例如,暂存、生产等),Kubernetes在容器上设置了一个环境变量(比如
FOO\u COUNT


让Nginx在每个响应上传递
FOO\u COUNT
值作为头,而不必为每个环境构建不同的容器,最简单的方法是什么?

开箱即用,Nginx不支持大多数配置块中的环境变量。但是,你可以使用

只需在名为的nginx容器中创建一个可用的配置模板,例如
/etc/nginx/conf.d/mysite.template

它包含您的nginx配置,例如:

location / {
    add_header X-Foo-Header "${FOO_COUNT}";
}
然后使用

/bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
/bin/bash-c“envsubst/etc/nginx/conf.d/default.conf&&nginx-g‘守护进程关闭’”
如果您使用的是
docker compose.yml
文件,请使用


Kubernetes.

这是在nginx 1.19+中实现的。此功能现在已内置

您只需将
default.conf.template
文件(它查找*.template后缀)添加到
/etc/nginx/templates
,启动脚本将在其上运行
envsubt
,并输出到
/etc/nginx/conf.d


阅读更多信息,请参见此处的示例

另请参见本文。讨论@lifeisfooThanks给出的类似技巧。看来我必须深入到Kubenetes文档中才能在pod上生成模板。不客气。请接受答案,如果它能解决您的问题,这将有助于未来的访客。