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实现反向代理
Sep 20 Servers
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
Mar 31 Servers
nginx location优先级的深入讲解
Mar 31 Servers
Nginx四层负载均衡的配置指南
Jun 11 Servers
nginx结合openssl实现https的方法
Jul 25 Servers
Linux中如何安装并部署Redis
Apr 18 Servers
IIS服务器中设置HTTP重定向访问HTTPS
Apr 29 Servers
搭建Yolov5服务器
Apr 30 Servers
使用Apache Camel表达REST服务的方法
Jun 10 Servers
Windows server 2012 NTP时间同步的实现
Jun 25 Servers
Win2008系统搭建DHCP服务器
Jun 25 Servers
CentOS7设置ssh服务以及端口修改方式
Dec 24 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下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
php实现图形显示Ip地址的代码及注释
2014/01/20 PHP
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
显示js对象所有属性和方法的函数
2009/10/16 Javascript
javascript学习笔记(十五) js间歇调用和超时调用
2012/06/20 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
2015/08/22 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
2015/09/06 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
python局部赋值的规则
2013/03/07 Python
python列表推导式操作解析
2019/11/26 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
Python matplotlib可视化实例解析
2020/06/01 Python
python如何快速生成时间戳
2020/07/21 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
python中pyplot基础图标函数整理
2020/11/10 Python
Python接口自动化测试框架运行原理及流程
2020/11/30 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
通息工程毕业生自荐信
2013/10/16 职场文书
银行职业规划书范文
2013/12/28 职场文书
2014年圣诞节促销方案
2014/03/14 职场文书
拉拉队口号
2014/06/16 职场文书
团队拓展活动总结
2014/08/27 职场文书
六一儿童节活动总结
2014/08/27 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
社区端午节活动总结
2015/02/11 职场文书
考试没考好检讨书
2015/05/06 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
分享几个实用的CSS代码块
2022/06/10 HTML / CSS