三体
Nginx limit_req 限流:几行配置挡住大部分CC攻击_我的网站

A |
直播吧4月21日讯 西甲第32轮,巴萨主场4-3逆转险胜塞尔塔。本场,费兰在第59分钟被替换下场,而法蒂和福特则枯坐板凳。据《每日体育报》报道,三人在替补席上表现出不同程度的不满,巴萨教练组认为这是积极的信号。
在赛季冲刺阶段,比赛中能否上阵体现了该名球员对球队的重要程度。

B | 本场比赛,由于亚马尔轮休,费兰得到了首发机会并且率先为巴萨打开记录,可是他被替换下场时表现得很不高兴,当时替代费兰的正是亚马尔,场上比分巴萨1-3落后。
至于法蒂,他下半时离开替补席做了半场热身,当得知不能登场的时候他明显不悦,巴萨10号把护腿板直接扔地上,并且脚踢替补席的凳子,以此表达他的失望和愤怒。

C |
一键部署OpenClaw 服务器CPU莫名飙高,带宽跑满,看日志全是同一个IP一秒打来几十个请求——这不是业务火了,是被CC了。扛CC的第一道闸门不在代码里,在Nginx的限流模块里,配置成本几乎为零。最后是福特,比赛结束后,他直接找主教练弗里克进行沟通,球员对于没有得到上场时间感到不快。
然而,巴萨教练组把球员们的这些反应看作是一种积极的信号。球员们不满被换下场或者对枯坐板凳不高兴,巴萨教练组表示这恰好反映了球员的竞争欲望,这对于维持阵容的活力非常关键。 limit_req的原理是漏桶:你设定一个速率,超速的请求直接返回503或延迟排队。先用limit_req_zone定义一个计数区,再在location里挂上limit_req,两步完事。
# nginx.conf 的 http 块里定义限流区
# 以客户端IP为key,10MB内存可存约16万个IP状态 # rate=10r/s 表示平均每秒最多放行10个请求 limit_req_zone
$binary_remote_addr zone=req_per_ip:
10m rate=
10r/s;
# server 或 location 块里应用 server { location / { limit_req zone=req_per_ip burst=
20 nodelay; proxy_pass http:
//127.0.0.1:8080; } } burst=20是缓冲队列长度,配合nodelay表示突发20个请求立即处理、不排队,超出就直接拒。想对登录、搜索这类昂贵接口管得更严,单独再定义一个rate=2r/s的zone挂上去就行,互不影响。
# 对登录接口单独限流:每秒2个,突发5个
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=2r/s;
location /login.php {
limit_req zone=login_limit burst=5 nodelay;
# 被限流的请求返回429而不是默认503
limit_req_status 429;
fastcgi_pass 127.0.0.1:9000;
}
验证很简单:reload之后用ab压一下,ab -n 200 -c 20 https://你的域名/,看返回里有没有429或503;同时tail -f日志确认正常用户没被误伤。限流阈值别拍脑袋定,先统计自己站点的正常峰值,设成峰值的两倍左右再逐步收紧。

D | 限流是防守,如果卡死自己人就本末倒置了。 数据来源:nginx.org官方文档 ngx_http_limit_req_module 模块说明
申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!。
Current article:http://www.chaochangkuanbandangyogeseng.sbs/news/20260826_2307.xls
Published on:16:15:55