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
nginx对http请求处理的各个阶段详析
Mar 31 Servers
扩展多台相同的Web服务器
Apr 01 Servers
详解Apache SkyWalking 告警配置指南
Apr 22 Servers
Nginx+Tomcat负载均衡集群的实现示例
Oct 24 Servers
Rhit高效可视化Nginx日志查看工具
Nov 01 Servers
zabbix自定义监控nginx状态实现过程
Nov 01 Servers
Linux安装apache服务器的配置过程
Nov 27 Servers
配置Kubernetes外网访问集群
Mar 31 Servers
如何通过cmd 连接阿里云服务器
Apr 18 Servers
利用nginx搭建RTMP视频点播、直播、HLS服务器
May 25 Servers
Linux磁盘管理方法介绍
Jun 01 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实现字符串大小写转函数的功能实例
2019/02/06 PHP
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
vuex state及mapState的基础用法详解
2018/04/19 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
python正则表达式re模块详细介绍
2014/05/29 Python
python实现定时发送qq消息
2019/01/18 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
Python如何读取文件中图片格式
2020/01/13 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
python绘制分布折线图的示例
2020/09/24 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
JBL英国官网:JBL UK
2018/07/04 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
JAVA高级程序员面试题
2013/09/06 面试题
区域销售经理岗位职责
2013/12/10 职场文书
策划创业计划书
2014/02/06 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
故宫英文导游词
2015/01/31 职场文书
小升初自荐信范文
2015/03/05 职场文书
学子宴致辞大全
2015/07/27 职场文书
三下乡活动心得体会
2016/01/23 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
MySQL入门命令之函数-单行函数-流程控制函数
2021/04/05 MySQL
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python
python 用递归实现通用爬虫解析器
2021/04/16 Python