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 相关文章推荐
Apache压力测试工具的安装使用
Mar 31 Servers
详解如何修改nginx的默认端口
Mar 31 Servers
nginx实现发布静态资源的方法
Mar 31 Servers
Nginx工作原理和优化总结。
Apr 02 Servers
Nginx反向代理至go-fastdfs案例讲解
Aug 02 Servers
Tomcat用户管理的优化配置详解
Mar 31 Servers
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
Apr 02 Servers
Tomcat项目启动失败的原因和解决办法
Apr 20 Servers
阿里云ECS云服务器快照的概念以及如何使用
Apr 21 Servers
使用Nginx的访问日志统计PV与UV
May 06 Servers
ubuntu下常用apt命令介绍
Jun 05 Servers
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
Aug 14 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删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
2014/10/20 PHP
PHP类相关知识点实例总结
2016/09/28 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
一些技巧性实用js代码小结
2009/10/14 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
js表单验证实例讲解
2016/03/31 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
在Django的视图中使用数据库查询的方法
2015/07/16 Python
利用python批量检查网站的可用性
2016/09/09 Python
tensorflow自定义激活函数实例
2020/02/04 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
Nike瑞典官方网站:Nike.com (SE)
2018/11/26 全球购物
.NET现在共支持多少种语言
2014/02/26 面试题
Python面试题集
2012/03/08 面试题
opencv实现图像平移效果
2021/03/24 Python
应届大学生简历中的自我评价
2014/01/15 职场文书
创业计划书模版
2014/02/05 职场文书
最新结婚典礼主持词
2014/03/14 职场文书
国窖1573广告词
2014/03/21 职场文书
旅游节目策划方案
2014/05/26 职场文书
运动会口号8字
2014/06/07 职场文书
会议欢迎词范文
2015/01/27 职场文书
体育活动总结
2015/02/04 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python