如何使用confd+ACM管理Nginx配置
Nginx 作为优秀的开源软件,凭借其高性能高并发等特点,常常作为web和反向代理服务部署在生产环境中。但是当 Nginx 的规模较大时, Nginx 的运维成本也是不断上升。本文介绍如何通过confd+ACM来管理 Nginx 配置,通过集中式的配置管理方式解决 Nginx 的大规模运维问题,运维和开发人员不用登陆到 Nginx 机器上,只需要配置好confd,然后在ACM上操作就可以动态修改 Nginx 的配置参数。
准备工作
在操作本文的示例之前需要配置好开通ACM和对confd的使用有基本概念。
Nginx 在日常开发中使用得比较多的功能是负载均衡、限流、缓存等, Nginx 的使用和安装可以在网上查阅相关资料。本文结合负载均衡和限流功能讲解如何使用confd+ACM实现 Nginx 的大规模运维操作。
创建confd配置文件
创建confd所需的toml格式配置文件
[code]vim /etc/confd/conf.d/myapp.toml
check_cmd用于检验 Nginx 配置的正确性,当src配置错误则不会覆盖 Nginx 配置
reload_cmd用于reload Nginx 配置
[code][template] src = " Nginx .conf.tmpl" dest = "/usr/local/ Nginx /conf/ Nginx .conf" keys = [ "/myapp/ Nginx /conf", ] check_cmd = "/usr/local/ Nginx /sbin/ Nginx -t -c {{.src}}" reload_cmd = "/usr/local/ Nginx /sbin/ Nginx -s reload"
创建模版文件
[code]vim /etc/confd/templates/ Nginx .conf.tmpl
getv从ACM中获取对应dataId的配置,/myapp/ Nginx /conf对应的dataId为myapp. Nginx .conf,配置格式为json格式,模版文件包含了 Nginx 的upstream、限流、黑白名单配置内容,通过json指令解析配置文件。upstream后端ip通过从ACM的配置的backends数组中获取,同样地,白名单和黑名单ip分别存储在whiteList和blackList的数组中,限流的速率和并发数通过rateLimit和connectionLimit设置
[code]... {{$data := json (getv "/myapp/ Nginx /conf")}} geo $whiteiplist { default 1; {{range $data.whiteList}} {{.}} 0; {{end}} } map $whiteiplist $limit { 1 $binary_remote_addr; 0 ""; } limit_req_zone $limit zone=rateLimit:10m rate={{$data.rateLimit}}r/s; limit_conn_zone $limit zone=connectionLimit:10m; {{range $data.blackList}} deny {{.}}; {{end}} upstream myapp { server 11.160.65.95:8080; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; proxy_pass http://myapp; limit_conn connectionLimit {{$data.connectionLimit}}; limit_req zone=rateLimit burst={{$data.burst}} nodelay; } ... } ...
在ACM上创建所需的配置文件
创建dataId为myapp. Nginx .conf的配置文件,group使用默认的DEFAULT_GROUP即可,配置内容设置好上游节点、黑白名单以及限流阈值
[code]{ "backends":["10.0.1.100:80","10.0.1.101:80"], "whiteList":["10.0.1.102","10.0.1.103"], "blackList":["10.0.1.104","10.0.1.104"], "rateLimit":"10", "connectionLimit":"10", "burst":"10" }
启动confd
启动confd,设置好backend、endpoint、命名空间namespace和阿里云账号accessKey/secretKey
[code]confd -backend nacos -endpoint {endpoint}:8080 -namespace {namespace} -accessKey {accessKey} -secretKey {secretKey}
生成配置文件
confd将ACM中的参数通过模板文件渲染生成新的 Nginx 配置文件,查看生成的/usr/local/ Nginx / Nginx .conf配置文件是否符合预期,并检查 Nginx 是否成功reload配置。
[code]... geo $whiteiplist { default 1; 10.0.1.102 0; 10.0.1.103 0; } map $whiteiplist $limit { 1 $binary_remote_addr; 0 ""; } limit_req_zone $limit zone=rateLimit:10m rate=10r/s; limit_conn_zone $limit zone=connectionLimit:10m; deny 30.5.125.74; deny 10.0.1.105; upstream myapp { server 11.160.65.95:8080; } server { listen 80; server_name localhost; location / { root html; index index.html index.htm; proxy_pass http://myapp; limit_conn connectionLimit 10; limit_req zone=rateLimit burst=10 nodelay; } ... } ...
动态修改 Nginx 配置
运行时当需要调节 Nginx 的名单或者限流阈值的时候,可以在ACM上修改配置的内容。当然在生产环境可以使用ACM的灰度发布功能(Beta发布)验证没问题再全量发布下去。
本文演示了如何使用confd+ACM管理 Nginx 配置,降低 Nginx 的运维成本。
原文链接
本文为云栖社区原创内容,未经允许不得转载。
- 如何配置和使用WebServices集群
- 如何使用.NET配置文件(一)
- 如何在 IIS 6.0 上配置托管的 Web 应用程序时使用 SPN(包括Network service ,domain acount, NLB, host header等各种情况)
- 如何使用.NET配置文件(二)
- JSP配置,教你如何熟练使用TOMCAT
- 如何使用linux ifconfig命令配置网卡
- 使用Axis1.4 和 Spring2.5.6搭建最簡易的Webservice及如何在Windchill 7.0中配置(二)
- 如何使用.NET配置文件(一)
- Enterprise Library 2.0 技巧(1):如何使用外部配置文件
- 如何使用links配置eclipse的plugin
- 【转】如何使用.NET配置文件by沐枫小筑
- 如何配置和使用Tomcat访问日志
- 简要介绍如何配置与使用 Linux 网络系统的多播IP
- 如何使用脚本安装和配置ISA Client,并设定ISA客户端的自动侦测
- 如何创建供客户端使用的服务器别名(SQL Server 配置管理器)
- 如何使用.NET配置文件(二)
- 如何使用Log4j进行日志操作(例程及配置介绍)
- 如何使用基于接口的Remote Objects的配置文件
- 如何配置证书服务器以便在 IIS 上与 SSL 结合使用
- asp.net 2.0 下如何配置使用fckeditor