经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Linux/Shell » 查看文章
nginx配置文件使用环境变量
来源:cnblogs  作者:janbar  时间:2021/6/7 9:05:54  对本文有异议

前言

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

学习envsubst

envsubst就是将环境变量替换文件里面指定标记的值。
例如有如下文件env.conf,内容如下

  1. [test]
  2. ip = ${ip}
  3. port = ${port}
  4. url = http://${ip}:${port}/index.html
  5. phone = ${phone}

当执行export ip=192.168.1.5export port=8081export phone=13522223334写入环境变量。
然后执行envsubst < env.conf > env.new.conf,就可以生成如下的env.new.conf

  1. [test]
  2. ip = 192.168.1.5
  3. port = 8081
  4. url = http://192.168.1.5:8081/index.html
  5. phone = 13522223334

还可以指定只替换部分环境变量,source env.env && envsubst '$ip;$phone' < env.conf,这样只会替换ip和phone这两个变量。
上面只替换部分环境变量,在Linux测试只能用单引号,用双引号无效,分隔符试过, . ; |这四种都可以,我估计还有更多分隔符。

应用nginx配置文件

docker-compose.yml文件如下

  1. version: "3"
  2. services:
  3. nginx:
  4. image: nginx:1.20.1-alpine
  5. container_name: nginx
  6. ports:
  7. - 80:80
  8. - 443:443
  9. environment:
  10. - NGINX_HOST=www.janbar.com
  11. - NGINX_PORT=80
  12. volumes:
  13. - /root/janbar.temp:/etc/nginx/conf.d/janbar.temp
  14. command: /bin/sh -c "envsubst < /etc/nginx/conf.d/janbar.temp > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
  15. network_mode: bridge
  16. restart: always

/root/janbar.temp文件内容如下

  1. server {
  2. listen ${NGINX_PORT};
  3. listen [::]:${NGINX_PORT};
  4. server_name ${NGINX_HOST};
  5. location / {
  6. root /usr/share/nginx/html;
  7. index index.html index.htm;
  8. }
  9. error_page 500 502 503 504 /50x.html;
  10. location = /50x.html {
  11. root /usr/share/nginx/html;
  12. }
  13. }

按照上述docker-compose.yml配置文件最终生成docker容器里面的配置文件如下cat /etc/nginx/conf.d/default.conf

  1. server {
  2. listen 80;
  3. listen [::]:80;
  4. server_name www.janbar.com;
  5. location / {
  6. root /usr/share/nginx/html;
  7. index index.html index.htm;
  8. }
  9. error_page 500 502 503 504 /50x.html;
  10. location = /50x.html {
  11. root /usr/share/nginx/html;
  12. }
  13. }

总结

经过上述骚操作,最终可以通过环境变量的方式更新nginx的docker容器内部配置文件。大功告成!

原文链接:http://www.cnblogs.com/janbar/p/14838474.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号