后端 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,可以:

  1. 在 EdgeOne 控制台添加后端 API 域名(如 api.code-guide.autogptai.club)
  2. 配置回源到你的 Nginx 服务器
  3. 开启 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 防护!

评论 0

最热最新
暂无评论
余胜军说java助理Lv.1
0
影响力
0
文章
0
粉丝
聊天室