
本文介绍如何通过 nginx 配置反向代理,将自研的基于机器学习的 web 应用防火墙(waf)部署在真实网站前端,实现请求拦截、攻击检测与合法流量放行,替代 apache 在 windows 下配置失败的方案。
在实际安全测试中,将自研 WAF 作为前置防护层部署,关键在于确保其能透明、可靠地代理所有进出流量。Apache 在 Windows 环境下常因模块兼容性、路径解析或 mod_proxy 配置复杂性导致反向代理失效;相比之下,Nginx 轻量、高性能、跨平台稳定,且对现代 Web 安全头(如 X-Forwarded-For、X-Real-IP)支持更完善,是更优选择。
以下为推荐的 Nginx 反向代理配置(适用于 WAF 作为独立 Web 应用运行在本地端口,例如 http://localhost:8080):
server {
listen 80;
server_name your-domain.com;
# 将所有请求转发至你的 WAF 应用(而非后端网站)
location / {
proxy_pass http://localhost:8080; # ← 替换为你的 WAF 实际监听端口
proxy_set_header Host $host;
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 X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
# 提升代理稳定性
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 300;
}
}✅ 关键说明:
- 此配置将用户请求先发往你的 WAF 应用(proxy_pass 指向 WAF),由 WAF 完成 ML 攻击检测(如 SQLi、XSS、恶意爬虫等)后,再由 WAF 自行决定是否将请求二次转发至后端真实网站(例如 http://backend:3000)。这符合你“WAF 作为拦截层”的架构设计。
- 若 WAF 已内置后端转发逻辑,请确保其响应头中正确透传客户端真实 IP(如通过 X-Real-IP),以便后端日志与风控策略准确归因。
- 强烈建议启用 HTTPS:在生产环境务必为 Nginx 添加 SSL 证书(可使用 Let’s Encrypt 免费证书),并在 server 块中配置 listen 443 ssl,同时添加 proxy_set_header X-Forwarded-Proto https,避免混合内容与协议降级风险。
⚠️ 注意事项:
- Windows 下安装 Nginx 后,请检查 nginx.conf 中 worker_processes 和 events 配置是否适配;首次启动前执行 nginx -t 验证语法。
- 若 WAF 应用依赖 WebSocket 或长连接,请确认其已正确处理 Upgrade/Connection 头,并在 Nginx 中启用对应代理支持(如示例所示)。
- 日志调试建议:开启 Nginx 的 error_log logs/error.log debug; 并配合 WAF 的访问日志,快速定位代理失败原因(如连接拒绝、超时、502 错误等)。
通过该方案,你可快速构建一个健壮、可观测、易于扩展的 WAF 部署链路,为后续模型迭代与真实流量压测奠定坚实基础。











