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结合openssl实现https的方法
Jul 25 Servers
Nginx+Tomcat负载均衡集群的实现示例
Oct 24 Servers
详解nginx location指令
Jan 18 Servers
HDFS免重启挂载新磁盘
Apr 06 Servers
Docker 镜像介绍以及commit相关操作
Apr 13 Servers
Nginx 安装SSL证书完成HTTPS部署
Apr 28 Servers
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
Apr 29 Servers
Nginx的gzip相关介绍
May 11 Servers
nginx实现多geoserver服务的负载均衡
May 15 Servers
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
Jul 15 Servers
Linux中一对多配置日志服务器的详细步骤
Jul 23 Servers
win10搭建配置ftp服务器的方法
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
php生成二维码
2015/08/10 PHP
php实现表单提交上传文件功能
2018/05/28 PHP
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
2011/07/31 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
Nodejs+express+html5 实现拖拽上传
2014/08/08 NodeJs
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
Angular中ng-bind和ng-model的区别实例详解
2017/04/10 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
JS removeAttribute()方法实现删除元素的某个属性
2021/01/11 Javascript
python的正则表达式re模块的常用方法
2013/03/09 Python
python中实现php的var_dump函数功能
2015/01/21 Python
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
python距离测量的方法
2018/03/06 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
如何使用repr调试python程序
2020/02/28 Python
Python configparser模块操作代码实例
2020/06/08 Python
Trunki英国官网:儿童坐骑式行李箱
2017/05/30 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
外贸业务员求职自荐信分享
2013/09/21 职场文书
财务人员个人求职信范文
2013/12/04 职场文书
高中同学会活动方案
2014/08/14 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
商务考察邀请函模板
2015/02/02 职场文书
2015年社区党建工作汇报材料
2015/06/25 职场文书
Python包argparse模块常用方法
2021/06/04 Python