Skip to content

Reverse Proxy

Aethersailor edited this page Aug 15, 2026 · 3 revisions

🛡️ 反向代理与公网部署

公网部署需要同时配置 TLS、入口访问控制、服务安全档位、请求大小、真实客户端地址和日志策略。

推荐拓扑

flowchart LR
    U["客户端"] -->|"HTTPS"| R["反向代理"]
    R -->|"HTTP / 私有网络"| S["SubConverter-Extended"]
    S --> O["外部配置、规则或需要后端解析的订阅"]
Loading

容器端口建议只绑定宿主机:

127.0.0.1:25500:25500

反向代理负责公开的 443 端口。不要同时把容器 25500 直接暴露公网,否则访问者可以绕过反向代理策略。

必须设置的应用配置

[managed_config]
managed_config_prefix = "https://sub.example.com"

[security]
profile = "public"
allow_public_upload = false

需要无条件禁止公开上传时使用 strict

Nginx 示例

server {
    listen 443 ssl http2;
    server_name sub.example.com;

    ssl_certificate     /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:25500;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 120s;
    }
}

订阅 URL 和外部配置参数可能使请求行较长。出现 HTTP 414 时,应先确认请求是否合理、是否已经正确 URL 编码,再调整入口代理的请求行限制。不要通过删除应用层 URL 限制来掩盖异常请求。

Dashboard 客户端地址

Dashboard 防爆破限制默认只信任与应用建立 TCP 连接的 socket peer。只有同时满足以下条件时,才读取代理请求头:

  • 应用端口不能被外部直接访问;
  • 入口代理会覆盖而不是附加所选请求头;
  • trusted_proxy_cidrs 只包含实际代理网络。

Docker 环境变量示例:

SUBCONVERTER_DASHBOARD_CLIENT_IP_HEADER=x-forwarded-for
SUBCONVERTER_DASHBOARD_TRUSTED_PROXY_CIDRS=172.18.0.0/16

不要把 0.0.0.0/0 或不受控制的网络写入可信代理范围。

缓存边界

  • 不要让 CDN 缓存包含订阅 URL 或用户参数的 /sub 请求。
  • explain=true 响应带有私有、禁止存储的缓存指令。
  • 外部配置错误和安全拒绝也不应被公共缓存复用。
  • 反向代理日志可能记录完整请求行;需要在入口层配置脱敏或避免记录查询字符串。

访问控制

public 安全档位限制请求方可控的私网和本地抓取,但不等于完整身份认证。只允许特定用户使用时,还需要在反向代理增加认证、IP 白名单或其他访问控制。

保护 /dashboard 不能替代保护 /sub。两者是不同访问面。

验证清单

  1. 从外部访问 https://sub.example.com/version
  2. 确认直连 http://公网IP:25500 不可访问。
  3. 检查启动日志中的最终安全档位。
  4. 使用公开测试输入执行 /sub
  5. 使用 explain=true 检查安全策略和目标路径。
  6. 检查入口日志是否意外保存查询秘密。

继续阅读:安全与隐私 · 出站代理

Clone this wiki locally