nginx配置文件使用环境变量的操作方法


Posted in Servers onJune 02, 2021

前言

Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。

由于现在需要部署nginx的docker,希望nginx配置文件里面有关server_name在启动容器前动态修改。
但是由于nginx的配置文件不支持使用环境变量。网上找了好些方案,最终选择使用envsubst的方式改写nginx配置文件。

工作原理

Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

Nginx的模块从结构上分为核心模块、基础模块和第三方模块:

核心模块:HTTP模块、EVENT模块和MAIL模块
基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块,
第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块。

学习envsubst

envsubst就是将环境变量替换文件里面指定标记的值。
例如有如下文件env.conf,内容如下

[test]
ip = ${ip}
port = ${port}
url = http://${ip}:${port}/index.html
phone = ${phone}

当执行export ip=192.168.1.5export port=8081export phone=13522223334写入环境变量。
然后执行envsubst < env.conf > env.new.conf,就可以生成如下的env.new.conf

[test]
ip = 192.168.1.5
port = 8081
url = http://192.168.1.5:8081/index.html
phone = 13522223334

还可以指定只替换部分环境变量,source env.env && envsubst '$ip;$phone' < env.conf,这样只会替换ip和phone这两个变量。
上面只替换部分环境变量,在Linux测试只能用单引号,用双引号无效,分隔符试过, . ; |这四种都可以,我估计还有更多分隔符。

应用nginx配置文件

docker-compose.yml文件如下

version: "3"
 
services:
  nginx:
    image: nginx:1.20.1-alpine
    container_name: nginx
    ports:
      - 80:80
      - 443:443
    environment:
      - NGINX_HOST=www.janbar.com
      - NGINX_PORT=80
    volumes:
      - /root/janbar.temp:/etc/nginx/conf.d/janbar.temp
    command: /bin/sh -c "envsubst < /etc/nginx/conf.d/janbar.temp > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
    network_mode: bridge
    restart: always

/root/janbar.temp文件内容如下

server {
    listen       ${NGINX_PORT};
    listen  [::]:${NGINX_PORT};
    server_name  ${NGINX_HOST};

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

按照上述docker-compose.yml配置文件最终生成docker容器里面的配置文件如下cat /etc/nginx/conf.d/default.conf

server {
    listen       80;
    listen  [::]:80;
    server_name  www.janbar.com;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

总结

经过上述骚操作,最终可以通过环境变量的方式更新nginx的docker容器内部配置文件。大功告成!

以上就是nginx配置文件使用环境变量的详细内容,更多关于nginx环境变量的资料请关注三水点靠木其它相关文章!

Servers 相关文章推荐
Nginx tp3.2.3 404问题解决方案
Mar 31 Servers
Nginx配置Https安全认证的实现
May 26 Servers
nginx作grpc的反向代理踩坑总结
Jul 07 Servers
Nginx+Tomcat负载均衡多实例详解
Apr 11 Servers
nginx搭建NFS网络文件系统
Apr 14 Servers
Windows Server 2012配置DNS服务器的方法
Apr 29 Servers
nginx配置限速限流基于内置模块
May 02 Servers
聊聊配置 Nginx 访问与错误日志的问题
May 25 Servers
win7配置本地ftp服务器的图文教程
Aug 05 Servers
windows10 家庭版下FTP服务器搭建教程
Aug 05 Servers
Linux在两个服务器直接传文件的操作方法
Aug 05 Servers
nginx+lua单机上万并发的实现
May 31 #Servers
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
Nginx配置Https安全认证的实现
May 26 #Servers
nginx部署多前端项目的几种方法
Nginx如何配置Http、Https、WS、WSS的方法步骤
May 11 #Servers
windows下快速安装nginx并配置开机自启动的方法
You might like
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
php 数组的合并、拆分、区别取值函数集
2010/02/15 PHP
php实现无限级分类实现代码(递归方法)
2011/01/01 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
js或css文件后面跟参数的原因说明
2010/01/09 Javascript
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
2012/12/03 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
为输入框加入数字js校验代码分享
2017/11/02 Javascript
记一次webapck4 配置文件无效的解决历程
2018/09/19 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
2018/09/30 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
vue.js实现照片放大功能
2020/06/23 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
决策树的python实现方法
2014/11/18 Python
Php多进程实现代码
2018/05/07 Python
Python利用myqr库创建自己的二维码
2020/11/24 Python
机械专业应届生求职信
2013/09/21 职场文书
商务英语专业毕业生自荐信
2013/11/05 职场文书
大一军训感言
2014/01/09 职场文书
家庭教育先进个人事迹材料
2014/01/24 职场文书
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
大学自主招生推荐信
2014/05/10 职场文书
雷锋观后感
2015/06/10 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫