nginx限流

news/2025/11/29 14:57:20/文章来源:https://www.cnblogs.com/douyuanjun/p/19286435

Nginx 限流测试完全指南

一、快速开始

1. Nginx 配置(http 块)

http{set_real_ip_from 100.127.0.0/16;    # 腾讯云 CLB 实际使用的网段set_real_ip_from 10.206.0.0/24;     # 保留原有的(如果有用)real_ip_header X-Forwarded-For;real_ip_recursive on;# 全局限流:4000 req/slimit_req_zone $server_name zone=global:10m rate=80r/s;# 限流区域定义limit_req_zone $binary_remote_addr zone=global_limit:10m rate=3r/s;# 添加全局限流limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

2. Nginx 配置(server 块)

server
{#PHP-INFO-START  PHP引用配置,可以注释或修改# include enable-php-81.conf;location ~ [^/]\.php(/|$){limit_req zone=global burst=30 nodelay;# limit_req zone=global_limit burst=2 nodelay;error_page 503 = @limit_json;try_files $uri =404;fastcgi_pass  unix:/tmp/php-cgi-81.sock;fastcgi_index index.php;include fastcgi.conf;include pathinfo.conf;}location / {# 先过全局限流(总闸门)limit_req zone=global burst=30 nodelay;# 再过单IP限流(防单点)# limit_req zone=global_limit burst=2 nodelay;error_page 503 = @limit_json;if (!-e $request_filename){rewrite  ^(.*)$  /index.php?s=$1  last;   break;}}location @limit_json {default_type application/json;return 200 '{"code":429,"msg":"前方拥挤,请稍后重试"}';}

3. k6 测试脚本

import http from 'k6/http';
import { Counter } from 'k6/metrics';const limitedRequests = new Counter('limited_requests');
const normalRequests = new Counter('normal_requests');export let options = {// 方案 1:固定高并发(同步,会被响应时间阻塞)// vus: 50,// duration: '10s',// 方案 2:固定请求速率(不受响应时间影响)scenarios: {constant_request_rate: {executor: 'constant-arrival-rate',rate: 3000,           // 每秒发送 1500 个请求 ⚠️如果这里的vu数不够 很难测试准确限流数timeUnit: '1s',       // 时间单位duration: '10s',      // 持续 10 秒preAllocatedVUs: 100, // 预分配 100 个 VUmaxVUs: 500,          // 最多 500 个 VU(应对慢响应) ⚠️如果这里的vu数不够 很难测试准确限流数},},// 方案 3:阶梯式压测(注释掉上面的,启用下面的)// stages: [//     { duration: '5s', target: 100 },//     { duration: '10s', target: 100 },//     { duration: '5s', target: 0 },// ],
};export default function () {// 单台服务器测试let res = http.get('http://domain:8001/index/index/index');// CLB 负载均衡测试// let res = http.get('http://domain');// 判断是否被限流let isLimited = false;try {const body = JSON.parse(res.body);if (body.code === 429 || body.code === '429') {isLimited = true;limitedRequests.add(1);// 打印限流响应console.log(`🚫 [限流] 状态码: ${res.status} | 响应: ${res.body}`);} else {normalRequests.add(1);// 打印正常响应(只显示前100字符)console.log(`✅ [通过] 状态码: ${res.status} | 响应: ${res.body.substring(0, 100)}...`);}} catch (e) {normalRequests.add(1);// 打印HTML响应(只显示前100字符)console.log(`✅ [通过] 状态码: ${res.status} | HTML响应: ${res.body.substring(0, 100)}...`);}// 不要 sleep,让请求尽可能快
}export function handleSummary(data) {const totalReqs = data.metrics.http_reqs.values.count;const rate = data.metrics.http_reqs.values.rate;const limited = data.metrics.limited_requests ? data.metrics.limited_requests.values.count : 0;const normal = data.metrics.normal_requests ? data.metrics.normal_requests.values.count : 0;console.log('\n========== 限流测试结果 ==========');console.log(`总请求数: ${totalReqs}`);console.log(`实际速率: ${rate.toFixed(2)} req/s`);console.log(`正常通过: ${normal} 次 (${(normal/totalReqs*100).toFixed(1)}%)`);console.log(`被限流:   ${limited} 次 (${(limited/totalReqs*100).toFixed(1)}%)`);console.log('');if (rate < 40) {console.log('⚠️ 实际速率低于预期,可能是:');console.log('   1. 网络延迟较高');console.log('   2. 服务器响应慢');console.log('   3. 并发数不够');} else if (limited === 0) {console.log('❌ 限流未生效!');} else if (limited / totalReqs > 0.5) {console.log('✅ 限流正常工作!');} else {console.log('⚠️ 限流部分生效');}// return {//     'stdout': JSON.stringify(data, null, 2),// };
}

4. 运行测试

k6 run high_concurrency_test.js

二、核心概念

关键参数

参数 说明 示例
rate 每秒允许的请求数 80r/s = 每秒 80 个请求
burst 突发流量缓冲区 30 = 可额外处理 30 个请求
nodelay 立即处理 不排队,立即返回

Token Bucket 算法

核心公式

总通过数 = rate × 时间 + burst

示例

rate=80r/s, burst=30, 测试 10 秒
理论通过 = 80 × 10 + 30 = 830 个

三、参数配置

k6 配置建议

k6 rate = Nginx 限流 × 25-50 倍示例:
Nginx 限流 = 80 req/s
k6 rate = 2000-4000 req/smaxVUs = rate × 响应时间
示例:
rate = 3000, 响应时间 = 0.2s
maxVUs = 3000 × 0.2 = 600

四、常见问题(大白话)

Q1: 为什么 VU 要等待?

银行例子

员工去银行办事:
1. 去银行(发送请求)
2. 等待办理(等待响应)⏳ 必须等!
3. 办完了(收到响应)
4. 才能再去下一次办事快(10ms):1 个员工 10 秒能去 1000 次 ✅
办事慢(747ms):1 个员工 10 秒只能去 13 次 ❌

关键

  • Nginx 很快(< 1ms)
  • 但要等整个链路(包括 PHP)
  • 慢的是 PHP,不是 Nginx

实际数据

你的测试(固定 50 VU):
响应时间:747ms
每个 VU:10,000ms ÷ 747ms = 13.4 次
总请求:13.4 × 50 = 670 次问题:VU 被阻塞,发送请求太少

Q2: 提高 rate 和 maxVUs,通过数会增加吗?

答案:不会!

银行规定:每分钟办理 80 人(Nginx 限流)你派 200 个员工:银行接待 830 人
你派 500 个员工:银行接待 830 人
你派 1000 个员工:银行接待 830 人无论派多少员工,银行只接待 830 人!

数据验证

rate maxVUs 总请求 通过 通过率
1500 200 3,163 750 23.7%
1500 500 14,674 837 5.7%
3000 500 29,515 829 2.8%

结论

  • 总请求增加 ✅
  • 通过数不变(~830)✅
  • 通过率下降 ✅

Q3: 为什么第一次只通过 750 个?

问题

配置:rate=80r/s, burst=30
理论通过:830 个
实际通过:750 个
差距:80 个(9.6%)

原因(银行例子)

你派了 200 个员工,办事慢(588ms)第 1 分钟:
- 110 人进去了(80+30)
- 这 110 人在办事(需要 35 秒)
- 剩余员工:200 - 110 = 90 人第 2 分钟:
- 80 人进去了
- 剩余员工:90 - 80 = 10 人
- ⚠️ 前面 110 人还在办事中第 3 分钟:
- 10 人进去了
- 剩余员工:10 - 10 = 0 人
- ❌ 所有 200 个员工都在银行里等着
- ❌ 没有空闲员工继续排队了!第 4-10 分钟:
- 没有员工可以去排队
- 虽然银行还能接待人
- 但你没人去了!结果:
- 只办理了 750 人
- 不是银行的问题
- 是你的员工不够用!

实际数据

测试 1(maxVUs=200):
总请求:3,163 个
正常通过:750 个
实际速率:157 req/s
VUs 使用:max=200(用满了)❌
dropped_iterations: 1838(丢弃了很多)测试 2(maxVUs=500):
总请求:14,674 个
正常通过:837 个
实际速率:983 req/s
VUs 使用:max=426(没用满)✅
dropped_iterations: 327(少很多)结论:
- maxVUs 不够 → VU 用满 → 测试不完整 ❌
- maxVUs 够用 → 测试正常 → 结果准确 ✅

五、测试结果

完美的测试

配置:rate=80r/s, burst=30
k6:rate=3000, maxVUs=500结果:
总请求:29,515 个
通过:829 个
被限流:28,686 个验证:
理论:830 个
实际:829 个
误差:0.12% 🎯

六、银行例子(大白话)

银行规定

银行:每分钟办理 80 人,排队区 30 人
10 分钟总共接待:830 人这是银行规定,不会变!

你的测试演进

测试 1:派 50 个员工(固定 VU)

办事慢(747ms)
每个员工 10 秒去 13 次
50 个员工去了 650 次
银行接待 627 人(91.8%)问题:
- 员工太少
- 被响应时间阻塞
- 银行没忙起来 ❌

测试 2:派 200 个员工(maxVUs 不够)

办事慢(588ms)
前 3 分钟:200 个员工用完了
后 7 分钟:没有空闲员工了
员工去了 3,163 次
银行接待 750 人(23.7%)问题:
- 正在办理的占用了员工
- 没有空闲员工继续排队
- 测试不完整 ❌

测试 3:派 500 个员工(maxVUs 够用)

办事慢(224ms)
有些员工在办事,有些继续排队
员工去了 14,674 次
银行接待 837 人(5.7%)效果:
- 员工够多
- 能持续排队
- 限流充分触发 ✅

测试 4:派 500 个员工,跑快点(完美)

rate=3000(更快)
员工去了 29,515 次
银行接待 829 人(2.8%)效果:
- 压力更大
- 测试更准确
- 误差 0.12% 🎯

关键理解

1. 办事快 vs 慢- 快(10ms):1 个员工 10 秒去 1000 次 ✅- 慢(747ms):1 个员工 10 秒去 13 次 ❌2. 员工够不够(重点!)- 50 个员工:被阻塞,去 650 次 ❌- 200 个员工:用完了,去 3,163 次 ❌- 500 个员工:够用,去 14,674 次 ✅3. 正在办理的也算- 200 个员工,前 3 分钟用完- 因为正在办理的占用了员工- 没有空闲员工继续排队了4. 银行规定不变- 无论派多少员工- 银行只接待 830 人!

七、总结

核心公式

总通过数 = rate × 时间 + burst示例:rate=80r/s, burst=30, 10秒
理论:80 × 10 + 30 = 830 个

关键点

1. Nginx 很快(< 1ms)
2. VU 要等整个链路(包括 PHP)
3. 固定 VU 会被阻塞
4. 固定速率不受影响
5. 通过数由 Nginx 决定

测试目标

验证限流配置正确 ✅
测试限流效果 ✅
确保系统稳定 ✅

完成! 🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/980845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年稳定性法兰工厂权威推荐榜单:钢衬活套法兰/一体法兰‌/PPH法兰‌源头工厂精选

在工业管道系统复杂度不断提升的背景下,全球法兰市场规模预计在2025年将突破200亿元,其中对高稳定性、高密封性法兰的需求增速尤为显著。 工业管道系统作为各行业的血脉,其连接可靠性直接关系到整个生产系统的安全与…

5-3 树的同构 (25分)

5-3 树的同构 (25分)#include <iostream> #include <string.h>using namespace std;struct node {int lchild, rchild;char key; }tree1[10], tree2[10];int flag[10];int getindex(char ch) {if(ch == -)…

2025西安网站建设公司推荐3家口碑好的网站制作公司

2025 西安网站建设公司推荐 3 家口碑好的网站制作公司随着西安数字经济加速发展,企业对 “官网名片” 的重视程度持续提升,专业的网站建设、网站制作与网页设计服务,成为企业拓展线上业务、塑造品牌形象的核心支撑。…

2025年高性价比超高频感应加热设备供应商排行榜,值得推荐的

为帮助制造企业精准锁定适配自身生产需求的超高频感应加热设备合作伙伴,避开选型陷阱,我们从技术核心竞争力(如感应加热效率、控温精度)、产品性价比优势(含能耗成本控制、长期运维成本)、定制化服务能力(覆盖非…

2025年污泥脱水机生产厂哪家售后好?TOP5推荐,专业设备

在环保监管趋严与绿色转型的双重推动下,污泥脱水机作为工业污水与市政污泥处理的核心设备,其性能稳定性与售后服务质量直接关系到企业的合规运营与成本控制。面对市场上鱼龙混杂的供应商,企业如何选择设备靠谱、售后…

NOIP2025 游记——希望不要是尾声

出场估分:\(100+100+48+[50,75]\)。这是流水账版,之后可能会写点 emotional 的东西。 总结一下:没有完全发挥出上限,但是保住了下限(前提是不挂大分)。T3 没有拼上 \(m\leq 2\) 还是有点可惜。T4 没有去刻意判 A…

2025年中央回转接头生产厂家权威推荐榜单:回转接头/中央回转体‌/起重机中心回转接头‌源头厂家精选

随着中国工程机械产业持续发展,中央回转接头作为液压系统的核心部件,其市场规模预计在2025年将达到87亿元,年增长率稳定在12%左右。 中央回转接头是工程机械、矿山设备和起重设备中不可或缺的关键部件,其性能直接影…

2025超高频感应加热装置TOP5实力企业推荐:专业度与案例

随着制造业对金属热处理精度、能效要求的提升,超高频感应加热装置因秒级加热、局部精准控温的优势成为核心装备,其市场年增速超30%。但行业中存在设备稳定性差、能耗高等问题,超30%企业因选品不当导致废品率上升15%…

2025网红景区空中飞艇制造厂商TOP5权威推荐:甄选专业供

近年来,无动力游乐设备成为景区流量密码,空中飞艇凭借高空观光与刺激体验的双重属性,成网红景区必争的爆款项目。但市场上供应商资质参差不齐,部分小厂存在材料劣质、安全无保障、售后缺失等问题,甚至因设计不合规…

武汉汽车后市场线上代运营公司排名推荐,武汉车视界信息服务有限

在汽车后市场数字化转型浪潮下,线上代运营成为汽服门店拓客的核心抓手,但市场服务商良莠不齐,割韭菜乱象频发。本文聚焦南京、武汉、杭州、合肥、福州五大城市,结合行业口碑与实战案例,评选出2025年汽车后市场线上…

oe投搞

oe投搞20251124初投,with editor

2025年小型开炼机定做厂家权威推荐榜单:国产开炼机/实验室开炼机‌/开炼机‌源头厂家精选

在新材料产业高速发展的推动下,全球实验室开炼机市场规模预计在2025年达到12.3亿美元,中国市场的贡献率超过35%,成为全球最大的需求方之一。 小型开炼机作为高分子材料、橡胶、塑料等行业研发与质量控制的核心设备,…

Google生成式UI下一代人机交互技术

Google生成式UI下一代人机交互技术Google生成式UI下一代人机交互技术1.0 摘要 在当前的技术浪潮中,大语言模型(LLM)已展现出在内容生成方面的卓越能力,深刻地改变了我们获取与处理信息的方式。然而,这些强大…

2025 哈尔滨精密轴承十大品牌

2024 年中国轴承行业营收突破 2315 亿元,哈尔滨企业功不可没。这里的轴承从 1mm 内径的微型件到半人高的大型轴承,都要经过 12 项严苛检测(如硬度、旋转精度、振动等),就像给机器的 “关节” 做全面体检。一、问题…

从设计到代码:兰亭妙微如何确保完美落地,告别“设计漂移”

从设计到代码:兰亭妙微如何确保完美落地,告别“设计漂移”这或许是产品开发中最令人痛心的时刻:设计师精心打磨的界面,在经过开发实现后,变得“面目全非”——像素不对齐、色彩有偏差、动效僵硬卡顿。这种现象被称…

详细介绍:【RDMA】mlx5dev mlx5dv_devx 接口

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年工业热处理设备企业满意度排名:瑞邦机电详细介绍及创

本榜单基于全国制造业用户调研数据与真实合作口碑,聚焦工业热处理与温控设备领域,深度筛选五家技术实力突出、用户满意度高的标杆企业,为制造企业选型提供客观依据,助力精准匹配降本增效的设备伙伴。 TOP1 推荐:江…

2025年TPE汽车脚垫十大品牌排行榜,全包围脚垫新测评精选

为帮助车主避开劣质脚垫的安全隐患与健康陷阱,精准锁定适配爱车的高品质TPE脚垫,我们从材质安全性(如环保认证、原料纯度)、工艺精准度(含模具技术、贴合度)、防护完整性(全包围设计细节)、售后保障力(物流、…

2025年宜昌十大短视频拍摄公司排行榜,信誉好、比较好的短视

短视频已成为中小企业品牌曝光、获客转化的核心阵地,但多数企业面临内容质量差、流量不精准、转化链路断的痛点。为帮助企业锁定适配的短视频服务伙伴,我们从内容创意能力(含行业适配性、视觉质感)、流量运营效率(…

2025年广东机器人服务商研发生产厂家推荐:广东知名机器人研

本榜单依托珠三角智能制造产业调研与企业真实合作口碑,深度筛选出五家标杆企业,聚焦工业机器人核心技术与场景适配能力,为制造企业选型提供客观依据,助力精准匹配专业的机器人服务伙伴。 TOP1 推荐:毅晟机械设备(…