如何使用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格式配置文件
vim /etc/confd/conf.d/myapp.toml
check_cmd用于检验 Nginx 配置的正确性,当src配置错误则不会覆盖 Nginx 配置
reload_cmd用于reload Nginx 配置
[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"
创建模版文件
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设置
...
{{$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即可,配置内容设置好上游节点、黑白名单以及限流阈值
{
"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
confd -backend nacos -endpoint {endpoint}:8080 -namespace {namespace} -accessKey {accessKey} -secretKey {secretKey}
生成配置文件
confd将ACM中的参数通过模板文件渲染生成新的 Nginx 配置文件,查看生成的/usr/local/ Nginx / Nginx .conf配置文件是否符合预期,并检查 Nginx 是否成功reload配置。
...
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 的运维成本。
原文链接
本文为云栖社区原创内容,未经允许不得转载。
如何使用confd+ACM管理Nginx配置相关推荐
- 如何在云上使用confd+ACM管理敏感数据
在前面的一些文章中,我们介绍了如何在云上安全的存放配置数据,但是上面的方法都是有代码侵入性的,也就是说需要修改应用程序,本文会讲解如何使用 confd+ACM 在不修改代码的情况下动态修改应用所需的配 ...
- 使用etcd+confd管理nginx配置
1.前言 最近在项目中用nginx做反向代理,需要动态生成nginx的配置.大概流程是用户在页面上新增域名.http或https协议以及端口信息,后台会根据域名自动生成一个nginx的server配置 ...
- python修改nginx配置文件_zookeeper 动态管理nginx配置
假设我们有一个场景,所有服务器共享同一份配置文件,我们肯定不可能单独手动维护每台服务器,这时可以利用zookeeper的配置管理功能. 环境:python + nginx + zookeeper 目的 ...
- nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)
前提:安装好nginx,如果已经启动nginx,先停止,命令: ./usr/local/nginx/sbin/nginx -s stop 修改nginx配置 vi /usr/local/nginx/c ...
- 使用logrotate管理nginx日志文件
本文转载自:http://linux008.blog.51cto.com/2837805/555829 描述:linux日志文件如果不定期清理,会填满整个磁盘.这样会很危险,因此日志管理是系统管理员日 ...
- php+php-fom+nginx配置参数调优详解
文章目录 一.前言 1.mysql配置参数: 2.注意 二.php参数配置及讲解 1.phpini的基本设置 2.php参数设置 三.php-fpm设置 1.设置子进程数,增加并发量 2.防止频繁出现 ...
- nginx 配置静态文件目录_nginx缓存静态资源,只需几个配置提升10倍页面加载速度...
nginx缓存静态资源,只需几个配置提升10倍页面加载速度 首先我们看图说话 这是在没有缓存的情况下,这个页面发送了很多静态资源的请求: 可以看到,静态资源占用了整个页面加载用时的90%以上,而且这个 ...
- logrotate管理nginx日志文件
转自:http://linux008.blog.51cto.com/2837805/555829/ 描述:linux日志文件如果不定期清理,会填满整个磁盘.这样会很危险,因此日志管理是系统管理员日常工 ...
- 4.Nginx配置进阶(四)
Nginx配置 ============================================================================== 概述: 本章我们将继续 ...
最新文章
- php中的大括号用法
- Python和Java就业前景对比
- .net framework 2.0 Silent install(.net framework 静默安装)
- 英国电信公司沃达丰遭到网络攻击
- vmware linux
- 使用javafx百行代码搞定多边形面积计算(可下载)
- android webviewclient 点击事件,Android Api WebViewClient 详细解析
- 华为杯数学建模优秀论文_【优秀论文】2019数维杯国际大学生数学建模竞赛B题优秀论文...
- 《Linux命令行与shell脚本编程大全》 第一、二章 学习笔记
- Git学习系列之Git基本操作推送项目(图文详解)
- dnf服务器字体文件,DNF普通伤害字体怎么改为超时空漩涡字体_字体制作方法分享_3DM网游...
- 有关NotifyIcon的使用
- 【硬刚大数据】从零到大数据专家之Apache Doris篇
- MySql经典面试题(含表)
- thinkphp5调用shell脚本_ThinkPHP 5.x远程命令执行测试工具(可getshell)
- 怎么制作多格视频?手机就能搞定
- 多宫格视频是什么软件_怎么制作多宫格视频/九宫格视频
- pcie读写ddr_5.3 存储器、I/O和配置读写请求TLP
- JQuery放大镜效果实现实例
- 世界坐标系,相机坐标系,像素坐标系,相机内外参 说明
热门文章
- 更新elementui图标不显示_elementUI字体图标不显示问题
- 【学习笔记】数据链路层——流量控制:停止等待协议、后退N帧协议(GBN)、选择重传协议(SR)
- go语言os.exit(1)_在Golang中各种永远阻塞的姿势
- win 8 共享连接数是多少_局域网IP限速怎么配置,限速多少比较合适
- 游戏教案 电子计算机,计算机模板电子教案.doc
- java+boolean+属性,java – 从属性中获取int,float,boolean和string
- 突发!哈佛要求本科生5天内搬走,国际学生恐无家可归
- 她16岁因汶川地震改志学医,仅27岁当上浙大博导!她说:科研是“止不住想念到失眠的对象”...
- 强烈推荐,关于5G最深刻的一篇文!
- 现代中国第一位数学博士是谁?