nginx:使用环境变量

2024-02-28

我有以下场景:我有一个环境变量$SOME_IP已定义并希望在 nginx 块中使用它。参考Nginx 文档 http://wiki.nginx.org/CoreModule我用env指令中的nginx.conf文件如下:

user www-data;
worker_processes 4;
pid /run/nginx.pid;

env SOME_IP;

现在我想使用该变量proxy_pass。我尝试了如下:

location / {
    proxy_pass http://$SOME_IP:8000;
}

但我最终得到了这个错误消息:nginx: [emerg] unknown "some_ip" variable


使用 NGINX Docker 镜像

Apply envsubst在容器启动时的配置文件模板上。envsubst包含在官方 NGINX docker 镜像中。

环境变量以表单引用$VARIABLE or ${VARIABLE}.

nginx.conf.模板:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    server {
        listen       80;
        location / {
            access_log off;
            return 200 '${MESSAGE}';
            add_header Content-Type text/plain;
        }
    }
}

Dockerfile:

FROM nginx:1.17.8-alpine
COPY ./nginx.conf.template /nginx.conf.template
CMD ["/bin/sh" , "-c" , "envsubst < /nginx.conf.template > /etc/nginx/nginx.conf && exec nginx -g 'daemon off;'"]

构建并运行 docker:

docker build -t foo .
docker run --rm -it --name foo -p 8080:80 -e MESSAGE="Hellou World" foo

NOTE:如果配置模板包含美元符号$不应被替换,然后列出所有使用的变量作为参数envsubst这样就只有那些被替换了。例如。:

CMD ["/bin/sh" , "-c" , "envsubst '$USER_NAME $PASSWORD $KEY' < /nginx.conf.template > /etc/nginx/nginx.conf && exec nginx -g 'daemon off;'"]

Nginx Docker 文档 https://hub.docker.com/_/nginx以供参考。寻找在 nginx 配置中使用环境变量.

在 nginx 配置中使用环境变量

开箱即用,nginx不支持内部环境变量 大多数配置块。但 envsubst 可以用作解决方法,如果 你需要在 nginx 之前动态生成 nginx 配置 开始。

这是使用 docker-compose.yml 的示例:

web:
  image: nginx
  volumes:
    - ./mysite.template:/etc/nginx/conf.d/mysite.template
  ports:
    - "8080:80"
  environment:
    - NGINX_HOST=foobar.com
    - NGINX_PORT=80
  command: /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

The mysite.template然后文件可能包含变量引用,例如 这:

listen ${NGINX_PORT};

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx:使用环境变量 的相关文章

随机推荐

  • 如何像Excel拖动一样基于模式填充pandas数据框?

    我有数据框 应该通过理解行来填充它 就像我们在 Excel 中所做的那样 如果是连续整数 则由下一个数字本身填充 python中有这样的函数吗 import pandas as pd d year 2019 2020 2019 2020 n
  • 具有 CORS 的跨域 REST/Jersey Web 服务

    我想使用 CORS 跨源资源共享 制作跨域 REST Web 服务 我正在使用泽西图书馆提供服务 我需要知道 从服务器端的角度来看 我需要进行哪些代码 配置更改 如何从 HTML5 js 调用此服务 Thanks 服务器端配置的所有信息都可
  • 将 Reporting Services 报表导出到 Excel 时抑制分页符

    将多页报表从 SQL Server 2008 Reporting Services 导出到 Excel 时 默认情况下 报表中由分页符创建的页面将发送到 Excel 文件中的单独工作表 虽然这在大多数情况下都很好 但有时却不然 现在 我希望
  • Python 多处理:类型错误:__new__() 缺少 1 个必需的位置参数:'path'

    我目前正在尝试使用 joblib 库和多处理后端在 python 3 5 中运行并行进程 但是 每次运行时我都会收到此错误 Process ForkServerPoolWorker 5 Traceback most recent call
  • 使用 PYQT 中的图像填充列表

    我有一个包含产品图像的外部数据库 是否可以导入这些图像并将其显示在滚动列表中 并使用户可以单击它们 类似于文件浏览器的工作方式 我只能找到有关转换为资源文件的人的信息 但我想知道是否可以跳过它 OK ListView 和 ListWidge
  • 检查SDCard是否存在,布尔值始终为true

    在我的启动屏幕中 我想检查手机是否有 SDCard 布尔语句如下 Boolean isSDPresent android os Environment getExternalStorageState equals android os En
  • 具有实体框架的 Oracle 非托管提供程序的 Nuget 包

    根据 Oracle 的最新文档 Net 数据提供程序开发人员指南 12c 第 1 版 安装 Oracle Data Provider for NET 非托管驱动程序 一章 声明非托管驱动程序的实体框架提供程序可在 NuGet 上使用http
  • 开发wordpress插件时如何调试php代码?

    我开始自己开发一些 WordPress 插件 在开发插件时 我在插件中使用不同的钩子 wp head add shortcode 等 函数 谁能告诉我一个简单方便的方法调试 WordPress 插件或者有没有其他方法可以轻松开发 WordP
  • 如何向 zend 表单添加“纯文本节点”?

    我正在尝试以 zend 形式添加纯文本节点 目的是仅显示一些静态文本 问题是 我不知道有任何这样的方法可以做到这一点 我已经使用了 描述 但必须将其附加到表单元素上 有什么方法可以简单地将一些文本显示为表单的一部分吗 Zend 将所有内容视
  • Oracle:存储过程的参数数量可变

    我想使用存储过程将各种用户插入到 Oracle 数据库中 一个用户 表 user 有名字 姓氏和出生日期 CREATE TABLE USER Name VARCHAR2 50 Surname VARCHAR2 50 Dt Birth DAT
  • Ruby:如何创建公共静态方法?

    在Java中我可能会这样做 public static void doSomething 然后我可以静态访问该方法而无需创建实例 className doSomething 我怎样才能在 Ruby 中做到这一点 这是我的课 根据我的理解se
  • 使用点将提示标签链接到系统发育树

    我正在尝试使用 R 中的 ape 包和函数plot phylo 生成一个非超度量树 我正在努力寻找任何有关如何使尖端标签在其左边缘垂直对齐以及如何用一系列点 可变长度 将物种名称连接到节点尖端的文档 任何帮助以及 R 中可能能够实现此目的的
  • 小黄瓜,两种情况可以相互依赖吗

    Scenario1 When a new user clicks on sign up page And provides login ID Then user is signed up and can view profile page
  • Node JS - 将数据从 Busboy 流式传输到 AWS S3

    我正在尝试通过 ec2 将文件上传到 s3 我的第一个方法是 将文件完全上传到 ec2 然后将该文件上传到 s3 这种方法不好 因为从 ec2 到 s3 的传输时间是浪费时间 目前我正在尝试使用服务员上传流 to s3上传流这样上传到 ec
  • 使用 Boost Python 和 std::shared_ptr

    我正在尝试让 Boost Python 与 std shared ptr 很好地配合 目前 我收到此错误 Traceback most recent call last File test py line 13 in
  • C# 中强制垃圾回收的最佳实践

    根据我的经验 似乎大多数人都会告诉您强制垃圾收集是不明智的 但在某些情况下 您正在处理的大型对象并不总是在 0 代中收集 但内存是一个问题 是强制收集可以吗 有这样做的最佳实践吗 最佳实践是不强制进行垃圾回收 根据 MSDN 强制垃圾是可能
  • 谁能推荐一个Java富文本编辑器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 Cloud Endpoints 中的客户端库。 jar 导入不起作用

    我为我的 appengine python 应用程序创建了一个 jar 文件 我已按照以下步骤导入我的库 jar 文件这个例子 https developers google com appengine docs python endpoi
  • Java 中的最终变量操作

    谁能告诉我下面这行在 Java 上下文中的含义是什么 最终变量仍然可以是 被操纵 除非它是不可变的 据我所知 通过将任何变量声明为最终变量 您将无法再次更改它 那么它们的含义是什么不可变的在上面一行 这意味着如果您的最终变量是引用类型 即不
  • nginx:使用环境变量

    我有以下场景 我有一个环境变量 SOME IP已定义并希望在 nginx 块中使用它 参考Nginx 文档 http wiki nginx org CoreModule我用env指令中的nginx conf文件如下 user www dat