• nginx配置文件使用环境变量


    前言

    由于现在需要部署nginx的docker,希望nginx配置文件里面有关server_name在启动容器前动态修改。
    但是由于nginx的配置文件不支持使用环境变量。网上找了好些方案,最终选择使用envsubst的方式改写nginx配置文件。

    学习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容器内部配置文件。大功告成!

    作者:janbar
    本文版权归作者和博客园所有,欢迎转载,转载请标明出处。喜欢我的文章请 [关注我] 吧。
    如果您觉得本篇博文对您有所收获,可点击 [推荐] [收藏] ,或到右侧 [打赏] 里请我喝杯咖啡,非常感谢。
  • 相关阅读:
    java中的构造方法
    在CentOS6.4上安装GitLab
    java通过文件路径读取该路径下的所有文件并将其放入list中
    java IO流 内容整理
    Selenium Webdriver元素定位的八种常用方式
    揭秘Alltesting众测平台
    TestCenter中测试需求、测试用例、测试计划的评审方法
    测试管理工具(TestCenter)产品功能介绍
    Bug管理工具(TCE)之缺陷导入与导出
    Bug管理工具(TCE)之缺陷流程定制
  • 原文地址:https://www.cnblogs.com/janbar/p/14838474.html
Copyright © 2020-2023  润新知