如何利用宝塔面板设置网站限流策略_防止恶意高并发请求

陌静君_9514

陌静君_9514

2026-03-30

1098人浏览

原创

宝塔面板限流依赖Nginx的limit_req模块,需手动配置limit_req_zone(置于http块)和limit_req(置于server或location块),支持按IP或接口精准限流,并须自定义503错误页及校验重载。

如何利用宝塔面板设置网站限流策略_防止恶意高并发请求

宝塔面板里限流用的是 Nginx 的 limit_req 模块

宝塔本身不提供图形化限流开关,所有限流逻辑都靠手动编辑 Nginx 配置,底层依赖 limit_req_zone 和 limit_req 这两个指令。如果你在面板里找“防刷”“限速”按钮,大概率会空手而归——那只是访问控制或防火墙的简易规则,和真正按 IP 或 key 限并发请求不是一回事。

实操建议:

  • 先确认你的 Nginx 编译时启用了 --with-http_limit_req_module(宝塔默认安装已包含,但自定义编译的可能没开)
  • 限流配置必须写在 http 块(全局生效)或 server 块(单站点),不能只丢在“网站-配置文件”的 location 里就完事
  • 别把 limit_req_zone 放进 server 块——Nginx 启动会报错:limit_req_zone directive is not allowed here

怎么写一个按 IP 限流的配置(每秒最多 5 个请求)

这是最常用也最容易出错的场景:想拦住扫描器或脚本刷首页,但又不想误伤正常用户。关键在于 zone 定义位置、key 的选择,以及 burst 和 nodelay 的配合。

实操建议:

  • 在 Nginx 主配置(/www/server/nginx/conf/nginx.conf)的 http 块开头添加:
    limit_req_zone $binary_remote_addr zone=perip:10m rate=5r/s;
  • 在对应网站的 server 块里加:
    limit_req zone=perip burst=10 nodelay;
  • burst=10 表示允许突发 10 个请求排队,超过才直接 503;nodelay 不延迟执行,适合防爆刷(否则排队请求会拖慢响应)
  • 别用 $remote_addr 当 key——IPv4 映射到 IPv6 时会失效;$binary_remote_addr 更紧凑且兼容性好

限制特定接口(比如 /api/login)比全站限流更稳妥

全站限流容易卡住静态资源或前端轮询,反而让页面白屏。真实攻击往往集中在登录、短信发送、搜索等接口,针对性限流效果更好,也更容易调参。

Manus
Manus

一款通用型AI智能体平台,可根据用户提出的目标自主拆解任务并执行多步骤工作,适合处理研究、分析和内容制作等复杂任务。

下载

实操建议:

  • 在网站配置文件的 location 块里单独设限:
    location = /api/login {<br>    limit_req zone=login burst=3 nodelay;<br>}
  • 为这类接口单独建 zone,避免和 IP 限流混用:
    limit_req_zone $binary_remote_addr$uri zone=login:10m rate=3r/s;
    (这样同一个 IP 访问不同接口互不影响)
  • 注意 = 精确匹配优先级最高,但不支持通配符;如果要匹配 /api/v1/login 和 /api/v2/login,得用 ~ ^/api/.*/login$
  • 测试时用 curl -I 看响应头是否有 X-RateLimit-Limit 或 Retry-After(需自己加 header,Nginx 默认不返回)

限流后 503 错误页不友好?别改宝塔默认 503 页面

直接在宝塔“网站-错误页”里上传自定义 503.html,对 limit_req 触发的拒绝无效——Nginx 在进入 location 前就拦截了,根本不会走到你配的 error_page 路径。

实操建议:

  • 必须在触发限流的 location 或 server 块里显式指定:
    error_page 503 /503.html;<br>location = /503.html {<br>    root /www/wwwroot/your-site;<br>    internal;<br>}
  • internal 是必须的,否则用户能直接访问 /503.html 绕过限制
  • 别用相对路径写 root,宝塔里常见填成 ./ 或 ../,会导致 404;务必写绝对路径,比如 /www/wwwroot/myapp
  • 修改完配置后,用 nginx -t 校验语法,再 nginx -s reload ——宝塔面板点“重载配置”有时会跳过校验,悄悄失败

真正难的不是写那几行配置,而是想清楚“谁该被限”“在哪一级限”“被限后怎么反馈”。很多人加了限流却没观察 access.log 里的 503 计数,结果攻击流量照旧,还以为是配置没生效。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

并发请求

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

80

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

60

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

200

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

140

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

120

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

80

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

60

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

80

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

40

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
燕十八nginx精品视频教程
燕十八nginx精品视频教程

共23课时 | 8万人学习