You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

静态页面能否读取环境变量?容器Nginx静态页展示Pod环境变量方法咨询

实现Nginx容器静态页面展示Pod环境变量值

针对你的需求,这里提供两种可行的实现方案:

方案一:启动前注入环境变量到静态页面

这种方式在Nginx启动前,通过shell脚本将容器的deployment_env环境变量值直接写入静态页面的JavaScript代码中,前端脚本即可读取并展示。

步骤1:编写启动脚本

创建start.sh脚本,负责替换页面中的环境变量占位符并启动Nginx:

#!/bin/sh
# 将环境变量值注入静态页面的window.env对象
sed -i "s/var env = window.env;/var env = { deployment_env: '$deployment_env' };/g" /usr/share/nginx/html/showname/index.html
# 以非守护进程方式启动Nginx
nginx -g 'daemon off;'

步骤2:修改Dockerfile

将脚本和静态页面复制到容器中,设置脚本为启动入口:

FROM nginx:alpine
# 复制启动脚本
COPY start.sh /usr/local/bin/
# 复制你的静态页面到指定路径
COPY index.html /usr/share/nginx/html/showname/index.html
# 赋予脚本执行权限
RUN chmod +x /usr/local/bin/start.sh
# 设置启动命令
ENTRYPOINT ["start.sh"]

步骤3:调整静态页面代码

保留原代码即可,脚本会自动替换var env = window.env;这一行:

<html>
    <head>
        <title>Test NGINX passed</title>
    </head>
    <body>
        <h1>deploy_env</h1>
        <h1><span id="deploy_env" style="display: block;"></span></h1>
        <script>
            var env = window.env;
            var deploy = document.querySelector('#deploy_env');
            deploy.textContent = env.deployment_env;
        </script>
    </body>
</html>

启动容器时,通过-e deployment_env=$(hostname)(K8s中Pod的hostname默认就是Pod名称)传递环境变量即可。

方案二:用Nginx sub_filter模块动态替换内容

利用Nginx自带的sub_filter模块,在请求响应时动态替换页面中的占位符为环境变量值,无需依赖前端脚本。

步骤1:编写Nginx配置模板

创建default.conf.template文件,配置SSL和路径规则,并添加动态替换逻辑:

server {
    listen 443 ssl;
    server_name example.com;
    # 此处添加你的SSL证书配置,例如:
    # ssl_certificate /etc/nginx/ssl/cert.pem;
    # ssl_certificate_key /etc/nginx/ssl/key.pem;

    location /showname/ {
        root /usr/share/nginx/html;
        index index.html;
        # 替换页面中的占位符为环境变量值
        sub_filter '<span id="deploy_env" style="display: block;"></span>' '<span id="deploy_env" style="display: block;">$deployment_env</span>';
        sub_filter_once on;
    }
}

步骤2:编写启动脚本

用envsubst命令将环境变量注入Nginx配置:

#!/bin/sh
# 将配置模板中的$deployment_env替换为实际环境变量值
envsubst '$deployment_env' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf
# 启动Nginx
nginx -g 'daemon off;'

步骤3:调整静态页面

去掉原有的JavaScript脚本,保留占位符即可:

<html>
    <head>
        <title>Test NGINX passed</title>
    </head>
    <body>
        <h1>deploy_env</h1>
        <h1><span id="deploy_env" style="display: block;"></span></h1>
    </body>
</html>

步骤4:修改Dockerfile

复制配置模板、脚本和静态页面到容器:

FROM nginx:alpine
COPY default.conf.template /etc/nginx/conf.d/
COPY start.sh /usr/local/bin/
COPY index.html /usr/share/nginx/html/showname/index.html
RUN chmod +x /usr/local/bin/start.sh
ENTRYPOINT ["start.sh"]

方案对比

  • 方案一:静态注入,启动时完成替换,性能更高,适合环境变量不会动态变化的场景。
  • 方案二:动态替换,每次请求处理时替换,灵活性稍高,但性能差异可忽略,适合需要动态更新变量的场景。

内容的提问来源于stack exchange,提问作者Fluke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:12:34