nginx代理java应用需构建三层安全防线:系统防火墙限端口与ip、nginx做路径控制与请求净化、waf拦截sql注入/xss等应用层攻击,并配套验证、结构化日志及与后端协同。

用 Nginx 代理 Java 应用时,安全不能只靠 SpringBoot 自身校验,必须在流量入口层就设防。核心思路是:系统防火墙守端口、Nginx 做路径与行为控制、WAF 拦应用层攻击,三层协同,避免恶意请求触达后端 JVM。
第一道防线:系统级端口与 IP 过滤
先在操作系统层面收紧入口,减少无效流量冲击 Nginx 进程:
- 仅开放 80(HTTP)、443(HTTPS)和必要管理端口(如 22),其他端口一律拒绝
- 对 Java 后台管理接口(如 /actuator、/swagger-ui、/h2-console)单独限制访问 IP:
sudo ufw allow from 192.168.5.0/24 to any port 8080 - 禁用 ICMP 响应(ufw deny proto icmp),降低被扫描识别的风险
第二道防线:Nginx 访问控制与请求净化
流量进入 Nginx 后,按业务路径做精细化拦截与限制:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 禁止直接访问敏感资源:
location ~ \.(jar|war|properties|yml|log)$ { return 404; } - 保护 SpringBoot Actuator 接口:
location /actuator { allow 127.0.0.1; allow 10.0.10.0/24; deny all; } - 限制高风险 HTTP 方法:
if ($request_method !~ ^(GET|POST|HEAD|OPTIONS)$) { return 405; } - 防止目录遍历和隐藏文件泄露:
location ~ /\. { deny all; }
autoindex off;
第三道防线:Lua WAF 或 ModSecurity 拦截应用层攻击
针对 Java 接口常见威胁(SQL 注入、XSS、恶意参数编码、CC 攻击),需引入规则引擎:
- 使用 OpenResty + Lua 实现轻量 WAF:
在 location /api/ 块中加入 access_by_lua_file /etc/nginx/waf.lua;,检测 base64_decode、java.lang.Runtime、class.classLoader 等 Java 反射/执行特征 - 启用 ModSecurity + OWASP CRS:
对 POST 请求体中的 JSON 参数做深度解析,拦截含 SELECT * FROM、UNION SELECT 的载荷,同时放行合法富文本字段(通过 SecRuleRemoveById 白名单) - 对登录、下单等关键接口做动态限流:
用 lua_shared_dict 统计 5 分钟内同一 IP 的失败次数,超阈值返回 429 并写入日志供 Fail2ban 后续封禁
配套必须动作:验证、日志与联动
规则配置后不验证等于没配,不记录等于无追溯依据:
- 每次修改后执行 nginx -t && nginx -s reload,并用 curl 模拟恶意 UA、SQL 片段、非法方法测试响应码
- 开启结构化日志:
log_format waf_json '{ "time": "$time_iso8601", "ip": "$remote_addr", "uri": "$uri", "status": "$status", "ua": "$http_user_agent", "blocked": "$waf_blocked" }'; - 将 Nginx 防御日志接入 ELK 或 Loki,设置告警规则(如 1 分钟内 403 超 50 次 → 触发 IP 封禁)
- 与后端 Java 应用协同:Nginx 在请求头注入 X-WAF-Status: blocked,SpringBoot 日志中统一标记为“前置拦截”,避免重复审计
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










