如何使用nginx实现分布式限流
发布时间 - 2023-05-13 00:00:00 点击率:次1.前言
一般对外暴露的系统,在促销或者黑客攻击时会涌来大量的请求,为了保护系统不被瞬间到来的高并发流量给打垮, 就需要限流 .
2.首先部署一个对外暴露接口的程序
我这里部署的是一个spring boot 项目 里面暴露了如下接口, 很简单
暴露了一个 get 请求返回 hello world 的restful 接口.
将此程序部署到 linux 服务器上. 部署步奏不再赘述, 自行百度 spring boot 部署 即可.
在此我向大家推荐一个架构学习交流群。交流学习群号:575745314 里面会分享一些资深架构师录制的视频录像:有spring,mybatis,netty源码分析,高并发、高性能、分布式、微服务架构的原理,jvm性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
3.创建一个名称为 nginx.conf 的 nginx 配置文件
创建一个 名叫 nginx.conf 的配置文件, 完整内容如下
配置文件中限流部分解释:
如上, nginx 的限流配置 , 只有两行代码.
第一行:
limit_req_zone : 是限流声明.
$binary_remote_addr: 表示根据客户端 ip 来 限流, 比如 上面的限流配置 限制每个客户端ip的请求频率为一秒一次, 你如果耍流氓一秒两次, 就会被限流 会返回一个http 503 错误给你.
zone=perip: 表示 用 perip 这个 名称 来标识 这行限流配置, 待会 会通过 perip 这个名称来引用这行限流配置(也就是说限流配置是可以定义为多个的)
10m: 表示存储客户
端ip的空间为10mb, 1mb 大概存储1万多ip , 10 mb 大概 10多万ip , 参考解释: ... 在这篇文章中搜索 binary_remote_addr 即可定位相关解释.
rate=1r/s: 表示频率是 一秒一个请求.
第二行:
表示在 myserver 这个集群上, 使用 名称为 perip 的限流配置
4.用docker 部署 nginx
将上一步创建的 nginx.conf 配置文件, 拷贝到linux 目录 , /root/nginx/ 下 (目录可以任意), 然后 一个docker 命令部署好 nginx 环境
这里暴露的是 8080 端口, 通过 8080 端口可以访问到 nginx 配置中的负载均衡节点, 即 192.168.10.253:8090 ip端口, 这个 ip端口对应的就是 , 第一步创建部署的 hello world 程序.
用代码访问 第一步定义的 helloworld 接口
我这里是 一秒 执行 10次 get 请求, 已经大于了 nginx中配置的 rate=1r/s 一秒一次的请求, 所以会看到 503 报错, 如下.
如果改哈代码, 改为一秒执行一次get 请求, 就不会报错, 各位可以去试一下
# nginx
# 配置文件
# 的是
# 报错
# 创建一个
# 这行
# 客户端
# 哈代
# 就会
# 给你
# 架构师
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
佛山企业网站制作公司有哪些,沟通100网上服务官网?
如何在局域网内绑定自建网站域名?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
Laravel如何为API生成Swagger或OpenAPI文档
长沙做网站要多少钱,长沙国安网络怎么样?
简历在线制作网站免费版,如何创建个人简历?
Python文件异常处理策略_健壮性说明【指导】
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
bootstrap日历插件datetimepicker使用方法
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
如何在Windows服务器上快速搭建网站?
JavaScript如何实现继承_有哪些常用方法
昵图网官方站入口 昵图网素材图库官网入口
Laravel如何升级到最新版本?(升级指南和步骤)
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
Mybatis 中的insertOrUpdate操作
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
Android仿QQ列表左滑删除操作
C#如何调用原生C++ COM对象详解
如何利用DOS批处理实现定时关机操作详解
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
Laravel如何使用withoutEvents方法临时禁用模型事件
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
Laravel如何实现数据库事务?(DB Facade示例)
如何快速搭建二级域名独立网站?
如何注册花生壳免费域名并搭建个人网站?
Laravel如何使用Collections进行数据处理?(实用方法示例)
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
JavaScript如何实现类型判断_typeof和instanceof有什么区别
如何快速上传建站程序避免常见错误?
香港服务器如何优化才能显著提升网站加载速度?
如何在搬瓦工VPS快速搭建网站?
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
如何将凡科建站内容保存为本地文件?
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
Python函数文档自动校验_规范解析【教程】
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)

