当前位置: 首页 > news >正文

Nginx限流配置实战:保护你的个人项目

Nginx限流配置实战:保护你的个人项目

前段时间我的个人博客上线后,有一天突然访问特别慢,一看服务器日志,好家伙——被爬虫疯狂扫接口,一分钟请求了几千次。

作为一个99元低配ECS,哪经得起这么折腾。赶紧把Nginx限流配上了,问题解决。

今天就把Nginx限流的几种常用配置分享出来,希望对你有帮助。


一、为什么要限流

个人项目上线后,你可能会遇到这些情况:

  • 爬虫疯狂抓取:把你的文章接口当API调
  • 恶意刷接口:有人用脚本扫你的登录接口
  • 瞬时高并发:文章突然火了,大量用户同时访问
  • 资源耗尽:低配ECS扛不住大量并发请求

限流不是为了让用户用不了,而是保护你的服务器不被拖垮。合理的限流配置,能让有限的资源服务好真正的用户。

二、Nginx限流基础配置

Nginx限流主要靠两个模块:limit_req(请求频率限制)和limit_conn(并发连接限制)。

2.1 限制请求频率

# 在 http 块定义限流区域 http { # 定义一个名为 "mylimit" 的限流区域 # 10m 表示存储10MB的客户端IP信息 # rate=1r/s 表示每秒只允许1个请求 limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s; server { location /api/ { # 应用限流 # burst=5 表示允许超过限制的5个请求排队 # nodelay 表示排队请求不延迟处理 limit_req zone=mylimit burst=5 nodelay; proxy_pass http://localhost:8083; } } }

参数说明:

参数作用
rate=1r/s每秒1个请求,超过的会被拒绝
burst=5允许突发5个请求排队
nodelay排队的请求不延迟处理
10m存储10MB的IP信息,够存几万个IP了

2.2 限制并发连接数

http { # 定义连接限制区域 limit_conn_zone $binary_remote_addr zone=connlimit:10m; server { location /api/ { # 每个IP最多10个并发连接 limit_conn connlimit 10; # 超时的请求断开 limit_conn_status 503; } } }

三、实际场景配置

场景1:保护文章接口

博客的文章列表和详情接口是爬虫最喜欢抓的:

http { # 文章接口限流:每秒2个请求 limit_req_zone $binary_remote_addr zone=articles:10m rate=2r/s; server { location ~ ^/api/posts { limit_req zone=articles burst=10 nodelay; proxy_pass http://localhost:8083; } } }

场景2:保护登录接口

登录接口更要严格限流,防止暴力破解:

http { # 登录接口限流:每分钟5个请求 limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m; server { location /api/auth/login { limit_req zone=login burst=3 nodelay; # 返回429状态码 limit_req_status 429; proxy_pass http://localhost:8083; } } }

场景3:限制某个目录的下载

如果你的网站有文件下载功能:

http { limit_conn_zone $binary_remote_addr zone=download:10m; server { location /download/ { # 每个IP同时只能下载1个文件 limit_conn download 1; # 限制下载速度为 500KB/s limit_rate 500k; } } }

四、白名单配置

有时候需要给特定IP(比如你自己)放行:

http { # 创建一个变量,默认为空 geo $limited { default 1; # 你自己的IP不限流 你的服务器IP 0; 你的家庭宽带IP 0; } # 只在 $limited=1 时限流 limit_req_zone $binary_remote_addr zone=api:10m rate=1r/s; server { location /api/ { if ($limited) { limit_req zone=api burst=5 nodelay; } proxy_pass http://localhost:8083; } } }

五、限流后的友好提示

当用户被限流时,Nginx默认返回503,但你可以自定义返回内容,让体验更好:

server { # 自定义限流返回 error_page 429 /429.html; location = /429.html { root /usr/share/nginx/html; internal; } # 或者返回JSON格式 error_page 429 @rate_limit_json; location @rate_limit_json { default_type application/json; return 200 '{"code":429,"message":"请求太频繁,请稍后再试"}'; } }

六、验证限流效果

配置完后,用 curl 测试一下:

# 快速发送10个请求,看有几个被限流foriin$(seq110);docurl-s-o/dev/null-w"%{http_code}\n"http://你的域名/api/postsdone

正常情况下你会看到一部分返回200,一部分返回429(被限流了)。

七、总结

Nginx限流是保护个人项目最简单有效的手段之一,配置起来也就几行代码,但效果立竿见影。

我的云深不知处博客配置了限流之后,再也没被爬虫打趴过。如果你也把个人项目部署在某云ECS上,建议第一时间配上限流。

如果你还没有服务器,可以看看某云的低至9.9元ECS活动,买个低配的先练手。新用户还有85折首购优惠,几十块钱就能跑一年个人项目,够用了。

如果你还没有服务器或者其它个人开发产品,点击「独立开发者的省钱攻略」获取更多福利优惠。


关于作者:无羡,独立开发者,专注AI应用开发。

📌 分类:全栈开发

👉 关注我获取更多技术分享
👉 个人博客:云深不知处
👉 独立开发省钱攻略:查看详情
👉 体验我的AI产品:一纸云深

如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是我持续创作的动力!

点击「阅读原文」查看我的独立开发笔记


👉 点击查看我的个人介绍

👉 点击查看我的小红书主页

http://www.jsqmd.com/news/1074949/

相关文章:

  • Multilogin 替代方案选型:团队环境、任务日志和交接字段怎么检查
  • 国内网络环境下的 Docker 镜像迁移与加速实战:用 Skopeo 替代 docker pull + docker tag + docker push
  • DCGAN六条铁律:解决模式坍缩与生成不稳的工程实践指南
  • 我怎么把上线前检查整理成一个交付 Skill
  • Vision-Language模型实战学习路径:从组件验证到端到端训练
  • 告别低效写作:高效论文写作全流程一键生成论文工具推荐(2026 最新)
  • Apple用Swift重写容器引擎?5层架构与轻量级VM深度剖析
  • 5个理由告诉你为什么PPTist是免费在线PPT制作的终极选择
  • 5G接入网虚拟化实战:基于SDN/NFV的vBTS平台架构与性能优化
  • 终极极域电子教室控制解除指南:如何一键恢复课堂电脑自主权
  • 监督学习与无监督学习的本质区别及工业落地指南
  • LoRA微调实战:GPU显存优化与大模型参数高效训练
  • 过拟合与欠拟合实战诊断:从偏差-方差权衡到业务落地
  • 警惕针对应届女大学生的高端资本杀猪盘:毁掉无数年轻人的隐秘骗局
  • PowerPC硬件调试机制详解:从事件驱动到寄存器配置
  • 5步掌握KMS_VL_ALL_AIO:Windows与Office智能激活的完整指南
  • PREEMPT_RT 技术实现:Threaded interrupt handler
  • Mikrotik RouterOS安全加固实战:从默认漏洞到防火墙配置全解析
  • VisualCppRedist AIO:Windows运行库一体化解决方案深度解析
  • 3步搭建Sunshine游戏串流服务器:告别延迟的终极解决方案
  • 环境配置记录
  • Windows文件同步终极解决方案:SyncTrayzor完整使用指南与实战技巧
  • 金融SRC漏洞挖掘实战:从业务逻辑到API安全的深度攻防指南
  • 2026年AI论文网站盘点:12款神器助你高效完成去痕改写、润色和过检
  • java--Day3-多态and包
  • 俄罗斯酒类推广实战指南:合规、文化与渠道的三重穿透
  • 3分钟搞定Rhino到Blender转换:import_3dm插件完全指南
  • 如何快速实现手机号码归属地查询:免费精准定位地图工具
  • Scikit-Learn棒球预测模型:物理特征与可解释性实战
  • Seedance 2.0 API万字解析:多模态视频生成工程实践