Skip to content

[Feature] 支持 per-entry proxy-url: "direct" 显式绕过全局代理 #2034

@uf-hy

Description

@uf-hy

问题

当配置了全局 proxy-url 时,无法在单个 entry 上禁用代理实现直连。

当前行为:

  • proxy-url: ""继承全局代理(而非"不用代理")
  • 没有任何官方关键字可以表达"这个 entry 不走代理"

这在以下场景会出问题:大部分 AI 渠道需要通过代理访问,但个别后端(如部署在内网或同区域的自建服务)从服务器直连更稳定。目前没有办法让某个 entry 跳过全局代理。

相关代码

proxy_helpers.go 中的代理选择逻辑:

// 空字符串 = 继承全局,没有"不用代理"的选项
if proxyURL == "" && cfg != nil {
    proxyURL = strings.TrimSpace(cfg.ProxyURL)
}

当前 Workaround

设置 proxy-url: "direct" 可以意外生效:

  1. 非空字符串 → 不继承全局代理 ✅
  2. url.Parse("direct") → scheme 为空 → buildProxyTransport 返回 nil → 回退到直连 ✅

但这是依赖实现细节的 hack,日志中会产生 unsupported proxy scheme: 错误,且未来代码变更可能破坏此行为。

建议

在代理解析逻辑中增加对 direct / none 关键字的显式支持:

if proxyURL == "direct" || proxyURL == "none" {
    return nil, nil // 直连,不使用代理
}

配置示例:

proxy-url: "socks5://user:pass@proxy:1080"  # 全局代理

entries:
  - path: /external-api
    proxy-url: ""          # 继承全局代理(现有行为不变)
  - path: /internal-api
    proxy-url: "direct"    # 显式直连,不走代理

相关

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions