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动态转换图片大小生成缩略图
Mar 31 Servers
nginx 多个location转发任意请求或访问静态资源文件的实现
Mar 31 Servers
Linux中Nginx的防盗链和优化的实现代码
Jun 20 Servers
CentOS7和8下安装Maven3.8.4
Apr 07 Servers
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
Apr 07 Servers
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
Apr 29 Servers
nginx设置资源请求目录的方式详解
May 30 Servers
阿里云服务器部署RabbitMQ集群的详细教程
Jun 01 Servers
win server2012 r2服务器共享文件夹如何设置
Jun 21 Servers
vscode远程免密登入Linux服务器的配置方法
Jun 28 Servers
nginx静态资源的服务器配置方法
Jul 07 Servers
Apache自带的ab压力测试工具的实现
Jul 23 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
phpMyAdmin 安装教程全攻略
2007/03/19 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
2014/04/28 PHP
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
PHP异常处理浅析
2015/05/12 PHP
PHP数组函数知识汇总
2016/05/12 PHP
PHP中单例模式的使用场景与使用方法讲解
2019/03/18 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
JS 文件传参及处理技巧分析
2010/05/13 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
JS网页在线获取鼠标坐标值的方法
2015/02/28 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
jquery+css3实现的经典弹出层效果示例
2020/05/16 jQuery
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
python中的格式化输出用法总结
2016/07/28 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
Puppeteer使用示例详解
2019/06/20 Python
python tkinter组件使用详解
2019/09/16 Python
python实现高斯投影正反算方式
2020/01/17 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
Python Pandas list列表数据列拆分成多行的方法实现
2020/12/14 Python
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
瑞典度假品牌:OAS
2019/05/28 全球购物
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
歌唱比赛主持词
2014/03/18 职场文书
法人委托书范本格式
2014/09/15 职场文书
机器人瓦力观后感
2015/06/12 职场文书