Nginx 限流实战:防 CC 攻击和爬虫的四个配置
背景服务器上有个公开的 dashboard虽然不对外宣传但日志里经常看到同一个 IP 一秒钟请求几十次某个爬虫把整站扫了一遍偶尔有恶意请求把 CPU 拉满fail2ban 能封 IP但它是事后——等攻击发生了才封。想做到事前限流让恶意请求根本打不进来。解决Nginx 限流有三个武器武器作用适用场景limit_req限制请求速率防 CC、防爬虫limit_conn限制并发连接数防慢速攻击limit_rate限制响应速度防大文件盗刷一、limit_req限制请求速率第一步在 http 块定义限流区# 按 IP 限流10MB 内存每秒 10 个请求 limit_req_zone $binary_remote_addr zonereq_per_ip:10m rate10r/s;参数说明参数含义$binary_remote_addr按客户端 IP 分组比$remote_addr省内存zonereq_per_ip:10m区域名 10MB 内存约存 16 万个 IP 状态rate10r/s每秒 10 个请求第二步在 server 或 location 里应用location / { limit_req zonereq_per_ip burst20 nodelay; # ... }参数解释参数含义burst20允许突发 20 个请求排队nodelay突发请求立即处理不延迟效果正常用户秒开无感CC 攻击超过 10r/s 后多出来的请求被延迟或拒绝返回 503第三步自定义拒绝状态码可选limit_req_status 429;默认是 503改成 429Too Many Requests更语义化。二、limit_conn限制并发连接数第一步定义连接区limit_conn_zone $binary_remote_addr zoneconn_per_ip:10m;第二步应用location / { limit_conn conn_per_ip 20; # 每个 IP 最多 20 个并发连接 # ... }三、limit_rate限制响应速度location /download/ { limit_rate 1m; # 每个连接限速 1MB/s limit_rate_after 10m; # 前 10MB 不限速 }用途防大文件被疯狂下载。四、完整配置# /etc/nginx/nginx.conf 的 http 块里 limit_req_zone $binary_remote_addr zonereq_per_ip:10m rate10r/s;limit_conn_zone $binary_remote_addr zoneconn_per_ip:10m;limit_req_status 429;# server 块里 server{listen 8443 ssl;# ... location /{limit_req zonereq_per_ip burst20 nodelay;limit_conn conn_per_ip 20;proxy_passhttp://backend_cluster;}# 静态文件放宽一点 location /static/{limit_req zonereq_per_ip burst50 nodelay;# ...}# API 收紧一点 location /api/{limit_req zonereq_per_ip burst5 nodelay;# ...}}关键原则静态资源松API 紧。因为加载一个页面可能同时请求几十个静态文件JS、CSS、图片API 每个请求都是计算不该被刷验证效果测试限流生效# 用 ab 或 wrk 打 100 个并发请求 ab -n 100 -c 10 https://example.com:8443/ # 看结果 Complete requests: 100 Non-2xx responses: 40 ← 40 个被限流了看 Nginx 日志sudotail-f/var/log/nginx/access.log|grep429期望能看到部分请求返回 429。看限流状态Nginx 的 stub_status 模块能看到当前连接数location /nginx-status { stub_status; allow 127.0.0.1; deny all; }curl http://127.0.0.1/nginx-status Active connections: 2 server accepts handled requests 1000 1000 5000 Reading: 0 Writing: 1 Waiting: 1实际效果指标改造前改造后单 IP 峰值请求200/s10/s超出被限CPU 峰值90%40%正常用户响应正常正常CC 攻击效果有效基本无效三个坑坑 1rate 和 burst 配得太紧rate1r/s burst0后果页面加载 10 个静态文件超过 1 个就限。正常用户都打不开。建议起步值场景rateburst个人网站10r/s20API5r/s10静态资源50r/s100调优方法先配宽松一点观察日志看正常用户的峰值是多少再往下压。坑 2limit_req_zone 内存不够10m 大约存 16 万个 IP 状态。如果攻击者用大量代理 IP比如僵尸网络状态表满了之后新 IP 无法被限流。监控方法# 在 http 块 limit_req_zone $binary_remote_addr zonereq_per_ip:10m rate10r/s;Nginx 会在日志里警告limiting requests, excess: 0.500 by zone req_per_ip如果经常看到说明内存不够或真的被打。建议个人服务器 10m 够用大流量网站加到 50m。坑 3CDN / 反代后$binary_remote_addr 是 CDN 的 IP问题如果前面挂了 Cloudflare / CDNNginx 拿到的 $remote_addr 是 CDN 的 IP不是真实用户 IP。结果所有用户共用一个限流额度 → 正常用户被误伤。修复配置 real_ip 模块从 X-Forwarded-For 提取真实 IPset_real_ip_from 173.245.48.0/20; # Cloudflare 的 IP 段 set_real_ip_from 103.21.244.0/22; real_ip_header CF-Connecting-IP;用 $binary_remote_addr 时它已经是被 real_ip 替换后的真实 IP没有 CDN 就不需要这一条。生活小插曲我的个人博客搭建好了也备好案了链接直达 点击这里

相关新闻

Qt音频EQ曲线绘制重构:滤波器分层、对数采样与性能优化

Qt音频EQ曲线绘制重构:滤波器分层、对数采样与性能优化

做桌面音频工具这行,EQ曲线是个看似简单、实际一碰就头疼的模块。最近我把手头Qt源码里的EQ曲线绘制整体重写了一遍,完成了一次“升级版”重构。这次升级的重点不在样式的花活,而是把所有计算重新分层、把每个公式的来龙去脉整理成详尽注释&a…

2026/10/15 5:21:10 阅读更多 →
Flink SQL on YARN 提交避坑指南:资源、依赖与认证实战

Flink SQL on YARN 提交避坑指南:资源、依赖与认证实战

1. 为什么一个提交命令能折腾我一整天刚接触 Flink SQL on YARN 那会儿,我以为最难的应该是 SQL 语法或者状态管理,结果真正让我在工位上坐到凌晨的,是那个看起来平平无奇的提交命令。flink run敲下去,日志刷了几百行,…

2026/10/15 5:21:10 阅读更多 →
智能驾驶基础理论体系全解析:从感知到控制的分层架构与工程实践

智能驾驶基础理论体系全解析:从感知到控制的分层架构与工程实践

1. 智能驾驶基础理论到底在讲什么1.1 从一次被问懵的经历说起前阵子有个刚入行的朋友找我聊天,说他面试一家做智能驾驶的公司,技术面聊得还行,结果终面被一位老工程师问了一句:“你觉得规划和控制之间,最本质的耦合点在…

2026/10/15 5:21:10 阅读更多 →

最新新闻

Vold与Rild架构深度对比:Android系统层守护进程的设计精髓

Vold与Rild架构深度对比:Android系统层守护进程的设计精髓

做Android系统层开发这些年,我始终觉得有两个native守护进程是所有做Framework、做系统定制的人都绕不开的:一个是负责存储卷管理的Vold,另一个是负责电话通信的Rild。这本书第8章把这两个东西放到一起讲,初看有点怪——Vold是管文…

2026/10/15 6:06:41 阅读更多 →
Android系统定制必读:Vold与Rild守护进程架构与排障实战

Android系统定制必读:Vold与Rild守护进程架构与排障实战

这章我前后翻了三遍,每次读都有新收获。Vold和Rild这两个名字,凡是做过Android系统定制或者ROM开发的人都不会陌生:一个管存储,一个管电话,看起来八竿子打不着,但都属于“用户空间最接近内核硬件”的那一层…

2026/10/15 6:06:41 阅读更多 →
ATML标准实战解析:基于XML的测试信息模型如何解决ATS接口难题

ATML标准实战解析:基于XML的测试信息模型如何解决ATS接口难题

搞测控系统这些年,我最大的感受就是:方案好写,接口难缠。同一个被测对象,上午在A台架上测完,下午换个台架,程序和配置往往要重写一遍;测试报告想统一归档,各台位导出的格式却五花八门…

2026/10/15 6:06:41 阅读更多 →
Spring AI智能客服流式输出可靠性:事件总线+Redis Pub/Sub+断线补拉

Spring AI智能客服流式输出可靠性:事件总线+Redis Pub/Sub+断线补拉

1. 客服系统上线前夜,我们被三个问题卡住了做过客服系统的人都有一个共识:功能跑通不难,难的是让它敢在真实流量下上线。我们这套基于 Spring AI 的智能客服系统,在测试环境里跑得挺漂亮,单轮问答准确率能到 90% 以上&…

2026/10/15 6:06:41 阅读更多 →
Linux文件IO深度解析:文件描述符、页缓存与排查实战

Linux文件IO深度解析:文件描述符、页缓存与排查实战

1. 先把“文件”这件事看清:描述符与内核对象做Linux开发这几年,我发现自己反复要给新同事讲同一个话题——文件IO。很多人一开始都觉得文件操作嘛,open、read、write、close,API背下来不就行了?但真到线上排查问题&am…

2026/10/15 6:06:41 阅读更多 →
猜数字游戏:从状态机到二分查找的编程实战训练指南

猜数字游戏:从状态机到二分查找的编程实战训练指南

1. 猜数字游戏:一个被低估的编程训练场1.1 为什么我把猜数字当成正式项目来对待很多人觉得猜数字游戏是编程入门第一课的标配,写个随机数、循环读入、判断大小、给出反馈,几十行代码完事。说实话,我最初也是这么想的。直到有一次&…

2026/10/15 6:05:40 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →