Ngnix 动态读取环境变量实现
作者:互联网
背景
在企业应用中,为保证产品质量,因此我们希望产线运行的系统和我们测试通过的系统为相同的代码,但是实际情况是开发环境,测试环境,产线环境配置变量不尽相同,给程序可靠发布带来一定的风险。为此我们寻求一种简单的方式实现各环境发布包为同一个包。本文主要介绍前端发布过程中如何解决Nginx通过动态获取环境变量实现版本可靠发布。
前置条件
本demo 基于docker实现,请自行安装docker 环境。
方案
通过根据环境不同,启动不同的首页,实现加载不同内容。
实现过程
一,创建Ngix配置模板文件
1.首先创建文件夹demo.
2.在demo文件夹中创建文件夹nginx.
3.在nginx文件夹中创建文件 default.template
server { listen 80; server_name localhost; #charset koi8-r; access_log /var/log/nginx/host.access.log main; error_log /var/log/nginx/error.log error; location / { if ($request_filename ~* .*\.(?:index.htm|index.html)$) ## 配置页面不缓存index.html和index.htm结尾的文件 { add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate"; } root /usr/share/nginx/html; index $envname.index.html $envname.index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
我们在默认启动首页前面设置变量$envname,docker 启动的时候动态替换该变量实现不同首页加载需求
二,创建dockerfile
#拉取nginx镜像 FROM nginx #把本地的dist文件夹下所有内容复制到/usr/share/nginx/html下 COPY dist/ /usr/share/nginx/html/ ##将nginx配置模板复制过去到指定目录 COPY nginx/default.template /etc/nginx/conf.d/ #将docker环境下的命令行路径切换到/etc/nginx/conf.d下执行 WORKDIR /etc/nginx/conf.d #添加环境变量的写入 ENTRYPOINT envsubst '$envname' < default.template > default.conf && cat default.conf && nginx -g 'daemon off;'
三,把html 文件夹拷贝到demo文件夹
dev.index.html 内容为dev
gqc.index.html 内容为gqc
prd.index.html 内容为prd
以实现根据配置读取默认启动首页的效果
四,打包镜像
在根目录demo文件夹内执行docker build . -t nginxdemo
命令将本地资源打包成镜像,镜像名为 nginxdemo
五,运行镜像
执行命令: docker run --name nginxdemo -d -p 8080:80 -e envname=dev nginxdemo 启动镜像
访问端口 localhost:8080 可以看到输出内容为dev
再次执行命令: docker run --name nginxdemo-prd -d -p 8081:80 -e envname=prd nginxdemo 启动镜像
访问 localhost:8081 可以看到输出内容为prd
以上就是本次功能实现的整体效果,主要依赖 envsubst 命令实现环境变量写入到nginx config文件
全部代码:https://files.cnblogs.com/files/mnps/demo.zip?t=1654784525
标签:文件夹,index,读取,Ngnix,nginx,html,docker,环境变量,log 来源: https://www.cnblogs.com/mnps/p/16361423.html