問題形狀:為什麼「瀏覽器會動,終端機不會」?

Clash Windows 環境裡,很常見的一種割裂是:你已用圖形用戶端開啟系統代理、或啟動 TUN 模式 讓瀏覽器、通訊軟體都正常,可是一回到 PowerShellCMD、或 Git Bash 執行 git clonecurlInvoke-WebRequest,連線仍然逾時、TLS 握手卡住、或 DNS 看起來「有解析卻上不去」。這通常不是節點突然全壞,而是命令列工具根本沒有沿用你以為的那條路徑

簡單說:瀏覽器走「系統 Proxy」或 Hook 進 TUN,和「某個終端機子行程是否讀到 http_proxyHTTPS_PROXY」是兩套機制。curl、多數語言套件管理器、以及以 HTTPS 連線的 git,通常會優先查看環境變數裡的 HTTP 代理字串;若變數空白,就可能嘗試直連,在你本來就需要代理才能出去的網路裡就表現成久等或失敗。相對地,你在用戶端裡設好的 mixed-port(常見為 127.0.0.1:7890)只要把位址明確餵進終端機看得見的位置,就能把 終端機走代理 的行為收斂到可重現。

ℹ️
與 WSL2 教學的界線 若你卡的是 WSL2 / Linux 子系統裡的 aptgit,請改讀 WSL2 裡讓 apt/git 走宿主機 Clash:那邊處理的是「子系統裡的 127.0.0.1 不是 Windows」這條軸線。本篇則鎖定原生 Windows 終端機,變數一律指到本機 loopback 上的 Clash 埠即可。

第一步:確認 Clash 監聽的 HTTP 埠就是你要填的那個數字

在寫任何 HTTPS_PROXYGit 代理 之前,請先確認「Clash 實際在本機開了哪個埠」。多數 Clash Meta/Mihomo 圖形用戶端預設會用 mixed-port,讓同一個埠同時接受 HTTP CONNECT 與 SOCKS;常見數字是 7890,但請以介面與設定檔為準。若你曾與其他軟體衝突而改過埠,繼續寫死 7890 只會徒勞無功;可參考本站 mixed-port 被佔用與 netstat 排查,用 netstat 或 PowerShell 的 Get-NetTCPConnection 對照目前 LISTENING 的行程。

接著請確認用戶端已啟動、訂閱有效、規則能把目標網站導向你期望的策略或節點。此處的重點是:終端機只是把流量投遞到你指定的本機埠;若 Clash 本身沒跑、或規則把該網域送到直連/錯誤群組,你在 curl 端一樣會看到失敗,只是表象與「沒設代理」不同。若尚未完成 Windows 用戶端安裝,可先對照 Clash Verge Rev Windows 安裝與設定教學,再回到本文補終端機面向。

PowerShell:目前工作階段與使用者/系統環境變數

在 PowerShell 7 或 Windows PowerShell 中,若要只在這個視窗有效,可直接指派:

$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:HTTPS_PROXY="http://127.0.0.1:7890"
$env:ALL_PROXY="http://127.0.0.1:7890"
$env:NO_PROXY="localhost,127.0.0.1,::1"

說明:HTTPS_PROXY 對許多工具而言仍是「經由 HTTP 代理做 CONNECT」,因此前面維持 http://127.0.0.1:埠 是常見且正確的寫法;port 請替換成你的 mixed-portALL_PROXY 則給會讀這個變數的程式(例如部分套件)一個統一後備;若你改採獨立 socks-port,可改用 socks5://127.0.0.1:埠,但需與實際監聽一致。

若要持久寫入目前使用者(下次登入仍有效,新開終端機也讀得到),可使用:

[Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://127.0.0.1:7890", "User")
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://127.0.0.1:7890", "User")
[Environment]::SetEnvironmentVariable("NO_PROXY", "localhost,127.0.0.1,::1", "User")

注意:已開啟的 IDE 或終端機分頁不一定會即時拾取新使用者變數,需關閉重開。另有一點容易誤會:早期教學常用 setx,但它會截斷過長字串且行為較難預期;優先改用上面 SetEnvironmentVariable 或圖形介面「環境變數」編輯器,維護成本通常更低。

CMD:set 與開機批次

在傳統命令提示字元,單次工作階段範例:

set HTTP_PROXY=http://127.0.0.1:7890
set HTTPS_PROXY=http://127.0.0.1:7890
set NO_PROXY=localhost,127.0.0.1

若某專案固定需要代理,亦可寫進專案專用的 .cmd 啟動腳本,先 set 再呼叫建置指令,避免把含有內網網段的 NO_PROXY 推到全機。

curl 代理:http_proxy 大小寫與驗證方式

Windows 上的 curl.exe(或 Git 附帶的 curl)多半同時認得大寫與小寫的代理變數;實務上建議兩組都寫齊,以減少跨工具差異:HTTP_PROXYhttp_proxy,以及 HTTPS_PROXYhttps_proxy。設定完後,用詳細輸出驗證是否走到本機埠:

curl -vI https://www.example.com

-v 紀錄中若可看到透過 proxy 連線、且 Clash 連線紀錄出現對應請求,即表示 curl 代理 路徑已接通。若仍直連,請回頭檢查變數是否在同一次工作階段內生效、或有沒有被專案腳本覆寫為空字串。

Git 代理:git config 與環境變數誰優先

https:// 遠端,最常見作法是全域寫入:

git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

若你同時設了 Git 代理HTTP_PROXY,不同 Git 版本與組建對「以誰為準」的細節可能略有出入;實務建議二擇一為主,並用 git config --global --get http.proxy 確認目前值。對單一網域(例如僅 GitHub)也可使用 http.https://github.com.proxy 這類鍵,避免公司內網 Git 被一併送去公用節點。

另須強調:[email protected]:user/repo.git 這類 SSH 協定預設不吃 HTTPS_PROXY;若要 SSH 也繞代理,需另行設定 ProxyCommand 或改用 HTTPS 遠端,這也是許多人「環境變數設好了仍 clone 失敗」的根因之一。

Git Bash 與 Profile:.bashrc.bash_profile

Git for Windows 附帶的 Bash 會讀取使用者目錄下的 shell 設定檔。你可以把 export 段落放在 ~/.bashrc 或依安裝版本載入的檔案中:

export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export NO_PROXY=localhost,127.0.0.1
export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"

存檔後執行 source ~/.bashrc 或重開視窗。這樣在 Bash 裡跑的 curl 代理、部分 Python/Node 工具鏈,較容易與你在類 Unix 環境下的習慣對齊。

TUN、系統 Proxy 與環境變數要不要並存?

有些人會問:開了 TUN 模式,為什麼還要設 http_proxy?簡短回答是:視核心/規則/程式是否把所有流量納入虛擬介面而定;部分開發工具或舊版 Runtime 仍可能繞過你所預期的路徑。實務上「TUN 正常 + 終端機再設代理」並不一定衝突,但若出現重複代理或回路,請優先檢視 Clash 日誌與規則命中順序;若想深入了解透明代理與 DNS,延伸可閱讀本站 Clash TUN 模式詳解

建議排查順序(濃縮)

  1. 確認 Clash 正在監聽目標埠(mixed-port 或分開的 HTTP/SOCKS),埠號與下文設定完全一致。
  2. 同一個終端機視窗內設定 HTTP_PROXYHTTPS_PROXY,先用 curl -v 驗證。
  3. 為 Git HTTPS remote 設定 http.proxyhttps.proxy,並區分 SSH 與 HTTPS。
  4. 需要永久設定時,改寫使用者環境變數並重開終端機/IDE。
  5. 若仍異常,對照 Clash 日誌是否有來自本機進程的連線紀錄;沒有則多半是仍直連或未指向正確埠。
⚠️
合規與安全提醒 請在所在地法令允許的範圍內使用代理服務;勿對外公開未授權的可連入代理埠。本文僅說明本機調試與開發情境下的環境變數位置,不提供任何違法用途指引。

結語:把「看得到 mixed-port」變成終端機預設心理模型

比起反覆猜測為何瀏覽器正常而指令列不正常,更值得建立的心智模型是:Clash Windows 在本機開了一個你可指定的HTTP(S) 代理入口,只要把 http_proxyHTTPS_PROXYGit 代理 指到同一個 127.0.0.1:埠,並分辨暫時與永久環境變數,就能把大多數 curl 代理、套件下載與 git clone 問題收斂到可複製的檢查清單。相較於僅依賴系統匣道的偶然一致,這種作法對開發與排錯通常更踏實。

若想取得整理好的多平台用戶端與維護說明,建議優先造訪本站下載頁取得最新組建,並搭配 Clash 說明與教學文件 建立長期可更新的工作流程。→ 立即免費下載 Clash,開啟流暢上網新體驗