【问题标题】:Have nginx set header on response according to environment var根据环境变量让 nginx 在响应中设置标头
【发布时间】:2021-01-29 18:15:25
【问题描述】:

我使用一个简单的 Nginx docker 容器来提供一些静态文件。我使用 Kubernetes 将这个容器部署到不同的环境(例如登台、生产等),它在容器上设置了一个环境变量(比如说FOO_COUNT)。

让 Nginx 将 FOO_COUNT 的值作为每个响应的标头传递而无需为每个环境构建不同的容器的最简单方法是什么?

【问题讨论】:

标签: docker nginx


【解决方案1】:

开箱即用,nginx 不支持大多数配置块中的环境变量。但是,你可以使用envsubst as explained in the official nginx Docker image

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

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

location / {
    add_header X-Foo-Header "${FOO_COUNT}";
}

然后用

覆盖Dockerfile命令
/bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"

如果您使用的是docker-compose.yml 文件,请使用command

Kubernetes provides a similar way to override the default command in the image.

【讨论】:

  • 谢谢。看来我必须深入研究 Kubenetes 文档才能让它在 pod 上生成模板。
  • 不客气。如果它解决了您的问题,请接受答案,这将对未来的访问者有所帮助。
【解决方案2】:

这在 nginx 1.19+ 中成为可能。此功能现已内置。

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

docs 上阅读更多信息,在此处查看示例https://devopsian.net/notes/docker-nginx-template-env-vars/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 2019-01-10
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    相关资源
    最近更新 更多