ETCD + CONFD + NGINX的配置
上一篇文章我们介绍了 ETCD 的容器化,搞这件事情的主要目的其实是要动态更新 Nginx 的配置 这一章我们就来配置 confd 和 Nginx,来达到动态更新 Nginx 配置的目的 一、安装配置confd 下载并安装: wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64 mv confd-0.16.0-linux-amd64 /usr/sbin/confd chmod +x /usr/sbin/confd 生成配置文件: 我们在 etcd 中存放的格式如下 etcdctl set /nginx/app01/subdomain app1 etcdctl set /nginx/app01/upstream/app01_1 "192.168.0.1:5601" /nginx/app01/subdomain "app01" /nginx/app01/upstream/app01_1 "192.168.0.1:5601" /nginx/app01/upstream/app01_2 "192.168.0.2:5601" 那么,我们先生成 confd 的配置文件: mkdir -p /etc/confd/{conf.d,templates} cat <<EOF>>/etc/confd/conf.d/nginx.toml [template] src = "nginx.conf.tmpl" dest = "/etc/nginx/conf.d/nginx-auto.conf" keys = [ "/nginx/app01/subdomain", "/nginx/app01/upstream", ] check_cmd = "/usr/sbin/nginx -t" reload_cmd = "/usr/sbin/nginx -s reload" EOF cat <<EOT>>/etc/confd/templates/nginx.conf.tmpl upstream {{getv "/nginx/app01/subdomain"}} { {{range getvs "/nginx/app01/upstream/*"}} server {{.}}; {{end}} } server { server_name {{getv "/nginx/app01/subdomain"}}.example.com; location / { proxy_pass http://{{getv "/nginx/app01/subdomain"}}; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } EOT confd 会根据 etcd 的值,结合 nginx.conf.tmpl ,生成 nginx-auto.conf,然后 nginx -t 验证通过后,执行 nginx -s rolad。 ...