news 2026/4/22 23:12:26

Java 后端踩坑记:Nginx+SpringBoot 集群遇恶意请求,雷池 WAF 免费方案守住稳定性

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 后端踩坑记:Nginx+SpringBoot 集群遇恶意请求,雷池 WAF 免费方案守住稳定性

作为 Java 后端开发,我们维护的用户管理集群(Nginx+3 台 SpringBoot 服务)之前踩了个大坑 —— 某晚突然收到告警,服务器 CPU 飙升到 98%,日志里全是 “/api/user/query” 的异常请求,参数带着奇怪的特殊字符,数据库连接池直接耗尽,服务瘫了 1 小时。试了加参数校验、改 Nginx 配置都没用,最后用雷池 WAF 的免费方案,不仅拦住恶意请求,还没花一分钱,今天分享整个踩坑与解决过程,Java 后端能直接复用。​

一、Java 集群的恶意请求坑,之前的解决方法都不管用​

我们的集群是 “Nginx 反向代理 + SpringBoot+MySQL”,日均请求 20 万次,之前遇到的问题很具体:​

  1. 参数攻击防不住:攻击者用 “userID=1' or 1=1 --” 这类变形参数调用接口,SpringBoot 的参数校验没拦住,导致 MySQL 报语法错误,连接池占满;​
  1. 高频请求扛不住:同一 IP 每分钟调用 500 次查询接口,Nginx 的简单限流按 IP 拦截,又会误拦正常用户;​
  1. 改代码不现实:集群有 10 多个接口,每个都加复杂校验要花一周,还影响现有功能。​

一开始试了两款免费 WAF,要么适配不了 SpringBoot 的 JSON 参数,要么规则太死板,直到同事推荐雷池,才发现免费工具也能解决专业问题。​

二、雷池 WAF 适配 Java 集群的实战步骤​

1. 部署雷池:Nginx 环境 10 分钟搞定​

我们的 Nginx 部署在 CentOS 7,雷池用 Docker 部署,不用改 Nginx 配置,直接接管流量:​

# 1. 装Docker(已装的跳过)​

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun​

systemctl start docker && systemctl enable docker​

# 2. 部署雷池,适配Nginx​

docker run -d --name leichi -p 80:80 -p 443:443 -v /etc/leichi:/etc/leichi --restart=always leichi/waf:community​

执行docker ps看到 “leichi” 状态为 “Up”,再执行docker logs leichi | grep "初始密码"拿到登录密码,打开浏览器输服务器 IP,用 admin + 初始密码登录控制台,改完密码就进入配置。​

2. 配置 SpringBoot 接口防护:3 步精准拦截​

步骤 1:关联 Java 集群​

在雷池控制台 “网站管理→添加网站”,填写:​

  • 网站域名:集群的公网域名(没域名填服务器 IP);​
  • 后端地址:Nginx 的内网 IP(执行ip addr能找到,比如 172.16.0.6);​
  • 后端端口:Nginx 的运行端口(默认 80)。​

点击 “保存”,雷池会自动反向代理 Nginx 流量,SpringBoot 服务不用做任何修改。​

步骤 2:拦参数攻击​

进入 “规则管理→SQL 注入防护”,开启 “智能语义分析”(比传统规则拦得更准),再针对 SpringBoot 接口加专属规则:​

  • 防护路径:填/api/user/*(我们的用户相关接口);​
  • 参数校验:设置 “userID 必须为纯数字”“orderID 格式为 ORD+8 位数字”,不符合直接拦截。​

配置后,再用 “userID=1' or 1=1 --” 测试,直接返回 403,日志里能看到 “参数异常拦截” 的记录,SpringBoot 后端再也没收到这类请求。​

步骤 3:解决高频请求​

在 “CC 防护→频率限制” 里加规则:​

  • 防护路径:/api/user/query;​
  • 限制维度:选 “IP + 用户 Token”(按用户限流,比纯 IP 精准);​
  • 频次阈值:设 “每分钟最多 30 次”,超过触发人机验证。​

这样既拦住恶意高频请求,又不影响正常用户,数据库连接池占用从 90% 降到 30%。​

三、踩坑总结:Java 后端用雷池的 3 个注意点​

  1. JSON 参数适配:SpringBoot 常用 JSON 传参,在雷池 “系统配置→HTTP 设置” 里勾选 “保留 JSON 参数结构”,避免参数解析错误;​
  1. 别过度防护:对健康检查接口(/actuator/health)加白名单,避免雷池拦截 SpringBoot 的监控请求;​
  1. 日志联动:把雷池日志同步到 ELK,和 SpringBoot 的业务日志一起分析,方便定位问题。​

现在我们的 Java 集群稳定运行 3 个月,恶意请求拦截率 99%,服务可用性从 95% 提到 99.9%,关键还完全免费。如果你们也是 Java 后端,维护 Nginx+SpringBoot 集群,遇到恶意请求问题,试试雷池,不用复杂配置,免费方案也能守住稳定性。​

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!