nginx动态修改配置文件基于confd 实现动态切换浏览

nginx动态修改配置文件基于confd

大纲

  • 使用场景
  • confd简介
  • confd安装
  • 使用场景
  • 基于file
  • 基于etcd
  • 基于consul

使用场景

在系统发布的时候可能需要动态的修改nginx配置,让后端的负载均衡动态改变

confd原理

confd 可以利用自己的配置文件模板生成对应真实程序需要的配置文件,监听数据是否变化,然后触发reload

confd简介

confd 是一个可以动态修改配置文件的工具,不仅限于nginx 任何使用配置文件的程序都可以使用

例如:nginx 修改配置后 reload 如果有多台机器手动修改比较麻烦不利于管理可以使用confd 接收一个统一的管理服务在修改模板触发nginx reload

官方地址:https://github.com/kelseyhightower/confd
使用说明地址(国内镜像): https://gitee.com/mirrors/confd/blob/master/docs/quick-start-guide.md

confd安装

Setp1 下载confd

wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64

github外网的原因速度很慢,对应的confd-0.16.0-linux-amd64 已经上传到百度云盘(目前最新版是0.16.0): 常用软件/confd文件夹

Setp2 修改权限和PATH

#重命名二进制文件,并移动到PATH的目录下 (也可以不放在path 但是加入到path路径中 修改/etc/profile)
mv confd-0.16.0-linux-amd64 /usr/local/bin/confd

#修改权限
chmod +x /usr/local/bin/confd

Setp3 验证是否安装成功

confd --help

nginx动态修改配置文件基于confd 实现动态切换浏览_第1张图片

使用场景

confd 支持多种后端数据源

  • etcd
  • consul
  • vault
  • environment variables
  • file (.yaml)
  • redis
  • zookeeper
  • dynamodb
  • rancher
  • ssm (AWS Simple Systems Manager Parameter Store)

基于file

基于数据文件(.yml)的变化实现动态修改配置nginx文件

基于file的方式需要准备三个文件

  • 1 confd配置文件 .toml:主要是配置各种使用到的key,以及程序的配置文件模板的地址
  • 2 程序的配置文件模板 .tmpl: 主要是利用一些变量来实现动态配置
  • 3 变量文件 .yml: 主要是key=value对应的文件**

以上文件中 .toml .tmpl是基于任何后端数据都必须要的配置文件 (例如 redis etcd 等 都需要配置.toml .tmpl文件)

**注意:confd默认搜索模板和配置文件的文件夹路径是/etc/confd/conf.d/xxx.toml /etc/confd/templates/xxx.tmpl 主要是要自己创建conf.d文件夹和templates文件夹 , 可以使用命令参数 -confdir 切换HOME路径 **

**例如 -confdir /data/confd 那么搜索路径变为 /data/confd/conf.d/xxx.toml /data/confd/templates/xxx.tmpl **

注意xxx.toml 配置文件上需要写入[template]

Setp1 创建资源文件夹

创建一个文件夹 例如/medcrab/tmp/fileconf 来保存两种配置文件
/medcrab/tmp/fileconf 文件夹下面在创建conf.d templates两个文件夹

在这里插入图片描述

Setp2 创建.toml confd配置文件

注意:

  • 1 需要在/medcrab/tmp/fileconf/conf.d 文件夹下创建
  • 2 .toml文件首部需要加上[template]

主要配置说明如下:

[template] 必要在文件首加上
dest  根据模板生产的文件地址
keys 模板中使用的key 注意key对应的value配置在.yml文件 redis etcd中
src  模板文件名   【 直接将.tmpl文件放入templates】中即可 不需要完整路径
# 以上三个必须

reload_cmd 重新加载文件命令  例如 nginx -s reload -c /xxx/nginx.conf
check_cmd 重新加载前执行的命令 nginx -t -c /xxx/nginx.conf

注意key对应的value配置在.yml文件 redis etcd中

nginx动态修改配置文件基于confd 实现动态切换浏览_第2张图片

Setp2 创建.tmpl 模板文件

模板文件基本上就是复制程序的配置文件:例如复制nginx的配置文件,然后将需要动态修改的地方使用变量
主要是用到了golang/text-template模板语言

Setp3 运行confd

confd运行有三种方式

  • confd -interval 60 按时间间隔来定时更新模板 (适合于一些中间件结合,中间件数据改了 自动触发)
  • confd -onetime 只执行一次 (适合自动化部署脚本启动触发)
  • confd -watch 监控数据文件是否变化(实际测试异常)

主要参数:

  • -interval 时间间隔
  • -backend 指定数据源, 数据源的种类有file etcd redis 这里用file
  • -file 指定数据源文件地址
  • -confdir 指定配置文件的路径
confd -interval 10   /data/confd -backend file -file ./myapp.yaml
confd -onetime -confdir /data/confd -backend file -file ./myapp.yaml
confd -watch -confdir /data/confd -backend file -file ./myapp.yaml  

你可能感兴趣的:(nginx解决方案,nginx,运维)