宝塔nginx防火墙变慢主因是cc阈值过严:免费版不区分资源、ua或cdn,统一计数易误伤正常请求;推荐60秒周期、按站点类型设20–60次/分钟,关闭自动封禁,避免多层限流叠加。

宝塔Nginx防火墙开启后网站变慢,基本就是CC阈值设得太紧
不是插件本身有问题,而是免费版的CC防御逻辑太简单:只要同一IP在设定周期内请求任意URI超过次数,就立刻拦截并返回403。它不区分资源类型、不看请求头、也不管是不是CDN回源或前端自动重试——结果就是正常用户点快一点、Vue路由切三页、甚至微信WebView预加载,都可能被卡住,Nginx反复做计数+判断+封禁动作,CPU占用明显升高。
触发频率设成10次/60秒?小心连百度爬虫都被拦
这个数字看着“严格”,实则极易误伤。真实访问中,一个页面加载常伴随多个请求:CSS、JS、字体、图片、API轮询,单IP 1分钟内轻松超15次。尤其带AJAX自动刷新或懒加载的站点,更低的阈值等于主动限速。
- 博客类静态为主:可从
20次/60秒起步,观察日志里403是否集中出现在搜索引擎UA(如googlebot) - 电商详情页多、含实时库存轮询:建议直接设为
60次/60秒或更高,否则用户滑动商品列表就卡顿 - 纯API服务(如
/api/v1/user):别用全局CC,改用limit_req针对路径限流,避免影响合法客户端重试逻辑
触发周期小于30秒?Nginx会频繁重置计数器,反而更耗CPU
Nginx的CC统计是基于共享内存区的原子操作,但周期越短,单位时间内的计数器创建/销毁/查找越密集。设成 10秒 看似响应快,实际会让 limit_req_zone 区域频繁刷新,加重锁竞争;而 300秒 又让攻击者有足够时间攒够请求再爆发。
- 推荐统一用
60秒:平衡统计精度与性能开销,也是宝塔默认值 - 若你站点QPS天然波动大(比如定时任务拉取数据后突增),可尝试
120秒,但必须同步把触发频率按比例上调(如原20次→40次),否则等效更严 - 注意:免费版不支持按
$request_uri或$http_user_agent单独建zone,所有URI共用一个计数器——所以别指望靠“只防 /login.php”来减压
真正拖慢网站的,往往是没关掉的“自动封禁”和错配的burst参数
很多人开了CC防御,又勾选了【自动加入黑名单】,结果Nginx每拦截一次就写一次磁盘日志+更新内存黑名单表,高并发下I/O和内存压力陡增。再加上手动写的 limit_req burst=10 nodelay 和宝塔CC规则叠加,请求排队逻辑混乱,首屏加载延迟翻倍。
- 务必关闭【自动封禁】:免费版的自动封只是临时限流60秒,且不进黑名单页签,查不到也清不掉,纯属干扰项
- 手写
limit_req时,burst值别乱填:设成burst=5比burst=50更稳;nodelay适合静态资源,但若用于PHP接口,去掉它才能避免突发流量打垮后端 - 检查是否同时启用了堡塔云WAF + 宝塔Nginx防火墙 + 站点流量限制:三者叠加会导致同一请求被多次拦截,日志里出现重复
403或503,排查时先关两个,留一个调参
最常被忽略的是:宝塔免费版CC防御没有“学习期”,它一启用就硬执行。你看到的“变慢”,大概率是前30分钟内真实用户正被误拦,而你还没来得及去【黑名单】页签手动放行——这时候调参数不如先看日志,搜 /www/wwwlogs/your-site.error.log 里的 403 行,挑出几个高频IP,确认是不是公司出口IP或测试机,再决定是调阈值还是加白名单。











