代理協定 · Clash文件

HTTP / HTTPS 出站代理

Clash 生態系的 HTTP 出站設定參考,以目前 Mihomo 欄位為準,涵蓋 CONNECT 通道、代理驗證、HTTPS 上游與憑證驗證。

  • CONNECT
  • TLS
  • SNI
  • 憑證驗證
  • mTLS
代理協定
本文章節

HTTP 出站如何建立連線

用戶端先連線 server:port 指定的上游代理,再傳送 HTTP CONNECT 請求建立到目標主機的 TCP 隧道。目標網站使用 HTTP 還是 HTTPS,不會改變這裡的節點類型。

type: http 預設表示以明文連線上游代理。只有設定 tls: true,用戶端到上游代理這一段才會使用 TLS。HTTP 出站本身不提供 UDP 轉發。

最小必填欄位

以下四項構成一個無需認證的最小 HTTP 出站。節點名稱用於策略群組和規則引用,不能與其他節點重名。

name必填
節點名稱,後續在 proxy-groups 或規則中使用。
type必填
固定填寫 http。
server必填
上游 HTTP 代理的網域或 IP 位址。
port必填
上游代理監聽連接埠,連接埠號本身不決定是否啟用 TLS。

認證與 CONNECT 請求標頭

上游需要 Basic 代理認證時同時填寫使用者名稱和密碼。headers 會加入 CONNECT 請求,可按閘道要求覆蓋預設的 Host、User-Agent 或 Proxy-Connection 等請求標頭。

username按需
上游代理認證使用者名稱。目前實作只有使用者名稱和密碼都非空時才傳送 Basic 認證。
password按需
與 username 配套的代理認證密碼。
headers按需
鍵值形式的 CONNECT 請求標頭。不要把目標網站的普通請求標頭設定在這裡。

HTTPS 上游與憑證驗證

開啟 TLS 後,SNI、憑證名稱和憑證鏈都針對上游代理,而不是最終存取的網站。正常情況下應保留憑證驗證。

tls按需
設為 true 後,以 TLS 連線上游 HTTP 代理。
sni按需
TLS 握手中的伺服器名稱,省略時使用 server。
name-cert-verify按需
單獨指定憑證 DNSName 驗證目標,不會修改 SNI。
skip-cert-verify謹慎
跳過憑證驗證,僅適合明確瞭解風險的臨時疑難排解。
fingerprint按需
完整憑證的 SHA-256 指紋,不是瀏覽器用戶端指紋。
certificate / private-key按需
成對填寫時啟用 mTLS,支援 PEM 內容或對應檔案路徑。

HTTPS 認證節點示例

示例同時啟用上游 TLS 和 Basic 認證。若上游無需認證,刪除 username 與 password;若上游是明文 HTTP 代理,刪除 tls 與 sni。

  • 出現 TLS 握手錯誤時,先確認上游是否真的提供 HTTPS 代理服務。
  • 出現 407 Proxy Authentication Required 時,核對帳號、密碼和上游允許的認證方式。
  • 出現 CONNECT method not allowed 時,上游可能不是正向代理,或未允許 CONNECT 方法。
YAML
proxies:
  - name: http-upstream
    type: http
    server: proxy.example.com
    port: 443
    username: user
    password: pass
    tls: true
    sni: proxy.example.com