You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextJS/NodeJS应用触发Plesk的ip_ban recidive规则封禁如何解决

触发规则的核心原因

recidive是Fail2ban的重复封禁规则,会统计短时间内多次触发其他基础封禁规则的IP,你配置的maxretry = 3意味着IP累计3次触发其他规则就会被recidive封禁。迁移NextJS后出现该问题,90%以上概率是服务端内部请求过多、或者反向代理IP传递配置错误导致的。

排查&解决步骤

第一步:确认被封禁的IP

先登录服务器执行命令查看Fail2ban日志,确定被封的IP身份:
grep "Ban" /var/log/fail2ban.log
根据结果分为两种场景处理:


场景1:被封IP是服务器自身公网IP/127.0.0.1

  • 优化NextJS内部调用逻辑:检查所有服务端执行的代码(服务端组件、getServerSideProps、getStaticProps、API路由内部调用),有没有直接请求本站点公网域名的逻辑,比如fetch("https://你的域名/api/xxx"),这类请求会从服务器自身发起走公网回源,短时间大量请求必然触发限流规则。优化方案为:内部调用直接复用逻辑函数,不走HTTP请求;确需走HTTP的改为请求本地地址http://localhost:3000走回路,避免公网请求。
  • 修正Plesk反向代理配置:登录Plesk进入站点的「Apache&Nginx设置」,在Nginx附加配置中添加如下规则,确保反代时传递真实客户端IP,避免所有请求被识别为服务器本地IP:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;

场景2:被封IP是普通访问用户的公网IP

  • 调整Fail2ban阈值:NextJS单用户访问时会一次性发起多个静态资源、页面、接口请求,默认阈值很容易误判。可以在Plesk的Fail2ban设置中,把HTTP请求检测规则的maxretry从默认值5调整到15,findtime从10分钟调整到30分钟,recidive规则的maxretry也可以调整为5,降低误判概率。
  • 配置静态资源缓存:在Plesk站点设置中给js、css、图片、字体等静态资源设置7-30天的浏览器缓存,大幅减少重复请求数量。
  • 确认NextJS运行模式:检查启动脚本是否是先执行next build编译,再用next start启动生产模式,不要使用开发模式next dev部署,开发模式会产生大量热更新请求,请求量是生产模式的数倍,极易触发限流。

额外优化建议

你提供的server.js中包含每次请求都执行的console.log("pathname", pathname);,生产环境建议删除该日志,避免日志量过大占用存储,也减少不必要的IO开销。


内容的提问来源于stack exchange,提问作者RussellHarrower

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 22:42:01