html中获取容器部署的环境变量

在云端环境下,标准产品的租户定制,可以通过登录人获取租户信息,再获取租户配置,进行项目的功能或ui调整。

如果是非云端的组件型产品------既无用户也无租户,却又有不同属地特殊要求,如何知道该项目部署于哪个属地就成为一个比较头疼的问题。

一个比较轻量级的方案是,容器部署时,传入属地信息。比如web项目,在项目中维护一个nginx配置文件模板,编写docker-entrypoint.sh文件用于容器启动:

sh 复制代码
envsubst '$TENANT' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf


# 启动 nginx
exec nginx -g "daemon off;"

在启动时,通过环境变量将属地信息注入nginx配置文件中:

bash 复制代码
server {
    ...
    location / {
      ...
      sub_filter "{tenant}" "${TENANT}";
    }
}

envsubst

envsubst 是 GNU gettext 工具集中的一个命令,功能是扫描文本中的环境变量占位符(如 ${VAR_NAME}),并替换为当前系统中对应环境变量的实际值

例如,若存在文本 Hello ${NAME}!,且环境变量 NAME="Docker",执行 envsubst 后会输出 Hello Docker!

sub_filter

sub_filter 的语法是 sub_filter "搜索字符串" "替换字符串",其中 "替换字符串" 可以是:

markdown 复制代码
-   固定文本(如 `"123"`、`"固定内容"`)
-   Nginx 内置变量(如 `$remote_addr`、`$time_local`)
-   变量与文本的组合(如 `"时间:$time_local-123"`)

这种替换对所有匹配 sub_filter_types 配置的响应类型生效(默认仅 text/html

在html中接收环境变量

html中可以通过{tenant}模板字符接收nginx替换后的变量,再将其存入localStorage中

xml 复制代码
<!doctype html>
<html lang="en">
 <head>
   <meta charset="utf-8" />
   <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

   <title>demo</title>
   <script>
     window.localStorage.setItem('tenant', '{tenant}');
   </script>
 </head>
 <body>
  
 </body>
</html>

这种方式在一定程度上能够防止变量篡改------每次访问该html,都会被nginx重新注入变量

相关推荐
Keepreal496几秒前
实现一个简单的hello world vs-code插件
前端·javascript·visual studio code
搞笑我们是认真的_______狗才写代码1 分钟前
技术总监:学着点,我们团队就缺这样的人才
后端
用户458203153172 分钟前
CSS 层叠层 (@layer) 详解:控制样式优先级新方式
前端·css
马尚来3 分钟前
掌握Kotlin编程,从入门到精通:视频教程
后端·kotlin
月弦笙音3 分钟前
【Vue组件】封装组件该考虑的核心点
前端·javascript·vue.js
清风细雨_林木木4 分钟前
HttpOnly 是怎么防止 XSS 攻击的?
前端·xss
yeyong5 分钟前
将所有的服务都放在里面做一个容器用supervisor管理进程 VS 用很多容器跑单独应用并集成一套,哪种更好?
后端
用户2519162427115 分钟前
Node之单表基本查询
前端·javascript·node.js
yeyong7 分钟前
在windows上如何编译出arm64架构可跑的go程序
后端
文心快码BaiduComate8 分钟前
基于YOLOv8的动漫人脸角色识别系统:Comate完成前端开发
前端·后端·前端框架