后端 API 没有经过 EdgeOne 的防护
余胜军说java助理
2025-12-13 16:09
阅读 891
明白了!那你的后端 API 没有经过 EdgeOne 的防护。让我看看你现有的 Nginx 配置,了解一下部署架构:
[1 tool called]
明白了!你的架构是:
- 前端:走 EdgeOne CDN(有防护)
- 后端 API:Nginx → 后端服务器(没有 DDoS 防护)
这是个安全隐患,后端 API 直接暴露了!我看到你的 nginx.conf 定义了 limit_conn_zone 但没有实际使用。
🔧 立即可做:增强 Nginx 层防护
你只需要修改 nginx.conf,在 http 块添加限流配置:
http {
# ... 已有配置 ...
# ========== 防护配置 ==========
# 1. 已有的连接数限制区域
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
# 2. 新增:请求频率限制区域
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=20r/s; # API 通用限流
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/m; # 登录接口限流
limit_req_zone $binary_remote_addr zone=sms_limit:10m rate=1r/m; # 短信接口限流
# 3. 自定义错误返回 JSON
limit_req_status 429;
limit_conn_status 429;
# ... 其他已有配置 ...
然后在每个 server 块的 location / 里添加限流:
server {
listen 443 ssl;
server_name api.code-guide.autogptai.club;
# ... SSL 配置 ...
# ========== 全局连接数限制 ==========
limit_conn perip 30; # 每个IP最多30个并发连接
limit_conn perserver 1000; # 整个服务器最多1000个并发连接
# ========== 敏感接口单独限流 ==========
# 登录接口 - 每分钟5次
location ~ ^/user/(login|wxlogin|register) {
limit_req zone=login_limit burst=3 nodelay;
proxy_pass http://backend_servers;
# ... 其他 proxy 配置 ...
}
# 短信验证码 - 每分钟1次
location ~ ^/user/sms {
limit_req zone=sms_limit burst=2 nodelay;
proxy_pass http://backend_servers;
# ... 其他 proxy 配置 ...
}
# SSE 流式接口(你已有的,加上限流)
location /user/coze/verify/chat/stream {
limit_req zone=api_limit burst=5 nodelay;
# ... 你已有的 SSE 配置 ...
}
# 通用 API - 每秒20次,突发30
location / {
limit_req zone=api_limit burst=30 nodelay;
limit_conn perip 30;
proxy_pass http://backend_servers;
# ... 其他已有配置 ...
}
}
🛡️ 更完整的 Nginx 防护配置
建议在 http 块添加这些:
http {
# ... 已有配置 ...
# ========== 安全防护配置 ==========
# 1. 限流区域定义
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=20r/s;
limit_req_zone $binary_remote_addr zone=strict_limit:10m rate=5r/s;
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/m;
limit_req_zone $binary_remote_addr zone=sms_limit:10m rate=1r/m;
# 2. 连接数限制(你已有,保留)
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
# 3. 限流返回 429
limit_req_status 429;
limit_conn_status 429;
# 4. 恶意 User-Agent 黑名单(直接 444 断开连接)
map $http_user_agent $bad_bot {
default 0;
~*Scrapy 1;
~*Nutch 1;
~*AhrefsBot 1;
~*SemrushBot 1;
~*MJ12bot 1;
~*DotBot 1;
~*BLEXBot 1;
~*python-requests 1;
~*Go-http-client 1;
~*Java/ 1;
"" 1; # 空 UA 也拒绝
}
# 5. 禁止常见扫描路径
map $uri $blocked_uri {
default 0;
~*\.php$ 1;
~*wp-admin 1;
~*wp-login 1;
~*\.asp 1;
~*\.aspx 1;
~*phpmyadmin 1;
~*\.git 1;
~*\.env 1;
}
# ... 其他配置 ...
}
然后在 server 块最前面添加拦截规则:
server {
listen 443 ssl;
server_name api.code-guide.autogptai.club;
# ... SSL 配置 ...
# ========== 安全拦截(放在最前面) ==========
# 拦截恶意 UA
if ($bad_bot) {
return 444; # 直接断开连接,不返回任何内容
}
# 拦截扫描路径
if ($blocked_uri) {
return 444;
}
# 全局连接数限制
limit_conn perip 30;
limit_conn perserver 2000;
# ========== 其他 location 配置 ==========
# ...
}
🚀 推荐的完整防护方案
| 层级 | 方案 | 作用 | 成本 |
|---|---|---|---|
| L3/L4 DDoS | 腾讯云 DDoS 高防包 | 防大流量攻击 | 约 ¥2800/月起 |
| L7 防护 | 腾讯云 WAF | 防 CC、SQL注入、XSS | 约 ¥3880/月起 |
| L7 防护 | EdgeOne 接入后端 | CDN + WAF + DDoS | 你已有,配置一下 |
| Nginx 层 | 限流 + UA过滤 | 基础防护 | 免费 ✅ |
| 应用层 | 你的 Bucket4j + 黑名单 | 细粒度控制 | 免费 ✅ |
💡 最佳建议:让后端 API 也走 EdgeOne
这是性价比最高的方案!你已经买了 EdgeOne,可以:
- 在 EdgeOne 控制台添加后端 API 域名(如
api.code-guide.autogptai.club) - 配置回源到你的 Nginx 服务器
- 开启 EdgeOne 的安全防护规则
这样你的后端也能享受:
- DDoS 防护
- CC 攻击防护
- WAF 规则
- 智能 Bot 识别
不需要额外付费,只需要配置一下!
需要我帮你写完整的 nginx.conf 修改方案吗? 是的!回源地址就是填你 Nginx 服务器的 IP 或域名。
让我画个图解释一下配置后的流量走向:
🔄 配置前(现状)
用户请求
│
▼
┌─────────────────────────┐
│ api.code-guide.xxx │ ← DNS 直接解析到 Nginx IP
│ (你的 Nginx 服务器) │ ← ⚠️ 没有 DDoS 防护!
└───────────┬─────────────┘
│
┌───────┴───────┐
▼ ▼
┌────────┐ ┌────────┐
│ 后端 A │ │ 后端 B │
│ :9999 │ │ :9999 │
└────────┘ └────────┘
✅ 配置后(EdgeOne 防护)
用户请求
│
▼
┌─────────────────────────┐
│ 腾讯云 EdgeOne │ ← DNS 解析到 EdgeOne 节点
│ (DDoS防护 + WAF + CDN) │ ← ✅ 攻击在这里就被拦截了
└───────────┬─────────────┘
│ 回源
▼
┌─────────────────────────┐
│ 你的 Nginx 服务器 │ ← 只接收 EdgeOne 的"干净"流量
└───────────┬─────────────┘
│
┌───────┴───────┐
▼ ▼
┌────────┐ ┌────────┐
│ 后端 A │ │ 后端 B │
└────────┘ └────────┘
📝 EdgeOne 配置步骤
1️⃣ 添加站点/域名
在 EdgeOne 控制台:
- 进入「站点管理」→「添加站点」
- 或在已有站点下「域名管理」→「添加域名」
- 输入:
api.code-guide.autogptai.club
2️⃣ 配置源站(回源地址)
| 配置项 | 填写内容 |
|---|---|
| 源站类型 | IP 地址 或 域名 |
| 源站地址 | 你的 Nginx 服务器 IP(比如 123.45.67.89) |
| 回源端口 | 443(HTTPS)或 80(HTTP) |
| 回源协议 | HTTPS(推荐)或 HTTP |
| 权重 | 如果只有一台 Nginx,填 100 |
💡 如果你有多台 Nginx,可以添加多个源站做负载均衡
3️⃣ 修改 DNS 解析
配置完成后,EdgeOne 会给你一个 CNAME 地址,比如:
api.code-guide.autogptai.club.eo.dnse3.com
去你的 DNS 服务商(腾讯云 DNSPod 等):
- 把
api.code-guide.autogptai.club的 A 记录 删除 - 添加 CNAME 记录 指向 EdgeOne 给的地址
4️⃣ 开启安全防护
在 EdgeOne 控制台该域名下:
- 「安全防护」→「DDoS 防护」→ 开启
- 「安全防护」→「Web 防护」→ 开启 WAF 规则
- 「安全防护」→「Bot 管理」→ 开启智能识别
⚠️ 重要:隐藏真实 IP
配置 EdgeOne 后,一定要隐藏你 Nginx 服务器的真实 IP,否则攻击者可以绕过 EdgeOne 直接攻击:
方法 1:Nginx 只允许 EdgeOne 回源 IP
# 在 server 块添加
# EdgeOne 回源 IP 白名单(需要从腾讯云获取最新列表)
# https://cloud.tencent.com/document/product/1552/90438
geo $allowed_ip {
default 0;
# EdgeOne 回源 IP 段(示例,请从官方文档获取最新)
43.152.0.0/16 1;
43.154.0.0/16 1;
43.155.0.0/16 1;
# ... 更多 IP 段
}
server {
listen 443 ssl;
server_name api.code-guide.autogptai.club;
# 只允许 EdgeOne 回源 IP 访问
if ($allowed_ip = 0) {
return 444;
}
# ... 其他配置 ...
}
方法 2:更换 Nginx 服务器 IP
如果可能,给 Nginx 服务器换一个新 IP,旧 IP 可能已经被扫描到了。
方法 3:配置防火墙
在云服务器安全组只放行 EdgeOne 的回源 IP 段,其他 IP 一律拒绝。
📋 配置清单
| 步骤 | 操作 | 状态 |
|---|---|---|
| 1 | EdgeOne 添加 API 域名 | ⬜ |
| 2 | 配置回源到 Nginx IP | ⬜ |
| 3 | 修改 DNS 为 CNAME | ⬜ |
| 4 | 开启 DDoS/WAF 防护 | ⬜ |
| 5 | Nginx 限制只允许 EdgeOne IP | ⬜ |
| 6 | 测试 API 是否正常 | ⬜ |
这样配置后,你的后端 API 就有了完整的 DDoS + WAF 防护!
标签:Java
为你推荐
暂无相关推荐

评论 0