教學 2026-04-18 · 約 16 分鐘閱讀

GitHub 與 npm 終端逾時?為 Clash 設定 HTTP 代理與 Git 代理(Windows/macOS/Linux)

許多人已用 Clash 讓瀏覽器順利開 GitHub,卻在終端機執行 git clonenpm installcurl 時仍遇到逾時、TLS 握手卡住或偶發連線重試。原因很常見:圖形介面的「系統代理」不會自動餵給所有命令列工具,而這些工具預設往往直連。本篇假設您的訂閱與規則已能正常上網,專注說明如何把終端流量對齊到 Clash 在本機開出的 HTTP(或 mixed)SOCKS 埠,並補上 Git 專用 proxynpm 設定,讓開發流程與瀏覽器一致;若您使用的是 WSL2 與 Windows 宿主機埠轉發,請一併參考站內 WSL2 與 Clash 連通專文,兩篇互補。

為什麼瀏覽器正常,終端卻不行

Clash 類客戶端常透過「系統代理」把作業系統層的 HTTP/HTTPS 導向本機埠,但這條鏈路主要服務會讀取系統代理設定的應用程式。許多終端工具(含 Git、部分版本的 curl、各種 CLI)要嘛完全不理會系統代理,要嘛只在偵測到 HTTP_PROXY 等環境變數時才走代理。另一種情況是:您開了 TUN 模式,理論上全系統封包會進內核轉發;但若實際仍只在「系統代理」層工作、或 TUN 未涵蓋該 shell 的網路命名空間(容器、SSH 遠端 shell、部分 CI 環境),終端仍可能直連。

因此,最穩定的做法是在 shell 層明確寫出代理 URL,必要時再為 Git、npm 各寫一組設定,避免「同一台機器、同一條訂閱,瀏覽器與終端卻走不同出口」的割裂體驗。接下來我們先對齊 Clash 監聽埠,再談環境變數與工具別名設定。

先確認 Clash 監聽哪個埠

開啟 Clash 設定檔或圖形介面中的「連接埠/埠」頁面,記下兩個數字:HTTP 或 mixed-port(常見為 7890),以及SOCKS 埠(若與 mixed 分開,常見為 7891)。若您只啟用 mixed-port,通常同一個埠同時接受 HTTP 與 SOCKS5,寫 http://127.0.0.1:PORTsocks5://127.0.0.1:PORT 皆可依工具支援度選用。

實務建議

對 Git、npm、curl 等以 HTTPS 為主的流量,優先使用 HTTP 代理 URLhttp://127.0.0.1:7890);若某工具只認 SOCKS,再改用 socks5://。兩邊埠號請以您本機實際設定為準,切勿硬抄教學數字。

HTTP_PROXY、HTTPS_PROXY 與 ALL_PROXY

多數遵循慣例的程式會讀取下列變數(大小寫並存較保險,因實作不一):

  • HTTP_PROXYhttp_proxy:明文 HTTP 與部分程式對「代理伺服器」的預設入口。
  • HTTPS_PROXYhttps_proxy:HTTPS 請求常走此變數指向的同一台本機代理(Clash 會再向外建 TLS)。
  • ALL_PROXYall_proxy:部分工具用於「全部協定」的後備;可設為與 HTTP 相同,或 SOCKS URL。
  • NO_PROXYno_proxy:排除清單,避免內網、本機 registry、公司 Git 走代理。

設定時請統一使用 127.0.0.1(或 WSL/Docker 情境下的宿主 IP),並帶上正確通訊埠。設完後可用 curl -I https://github.com 觀察是否仍長時間卡住;若 Clash 連線日誌出現對應請求,代表終端已經過代理。

macOS 與 Linux:bash/zsh 暫時與永久設定

當前工作階段暫時生效(關閉終端後消失):

# Replace 7890 with your Clash HTTP or mixed port
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export HTTP_PROXY="$http_proxy"
export HTTPS_PROXY="$https_proxy"
export ALL_PROXY="socks5://127.0.0.1:7890"
export all_proxy="$ALL_PROXY"
export no_proxy="localhost,127.0.0.1,::1"
export NO_PROXY="$no_proxy"

若要永久寫入,將上述 export 行加入 ~/.zshrc~/.bashrc,存檔後執行 source ~/.zshrc。若您同時使用多種 shell,請只改實際登入時會載入的那份設定檔,避免重複定義與除錯困難。

內網與公司 Git

請在 NO_PROXY 中加入內網網段或主機名(例如 *.corp.example10.0.0.0/8 視環境而定),否則內部程式庫與 registry 會被誤送進公開節點,造成認證失敗或路徑外洩風險。

Windows:PowerShell 與命令提示字元

PowerShell 中可對當前視窗設定:

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

若需使用者層級永久環境變數,可透過「系統內容 → 環境變數」圖形介面新增,或使用 setx(注意 setx 寫入後需新開終端才讀得到)。Windows Terminal 若混用 WSL,請記得:WSL 內的 shell 讀的是 Linux 側設定,與 PowerShell 的 $env: 互不通用;WSL 若要連宿主 Clash,請改設 WSL 可達的 IP 與埠,細節見前述 WSL2 專文。

Git:http/https proxy 與還原

Git 有獨立的設定項,適合長期固定,不必每次開 shell 都依賴全域 export。HTTP/HTTPS 儲存庫常用:

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

若您只用 SSH([email protected]:)clone,上述 http.proxy 不會影響 SSH;SSH 需改 ~/.ssh/configProxyCommand 搭配 nc/connect-proxy 等,屬另一條路徑。要取消 Git 代理

git config --global --unset http.proxy
git config --global --unset https.proxy

建議用 git config --global -l 複查,避免舊值殘留導致「只有 Git 特別慢」。

npm、yarn、pnpm 與 registry

npm 會讀取環境變數中的代理;也可明確寫入設定檔:

npm config set proxy http://127.0.0.1:7890
npm config set https-proxy http://127.0.0.1:7890

若公司使用內部 registry,請確認 registry 指向內網 URL 且該主機已列入 NO_PROXYyarnpnpm 同樣支援 HTTP_PROXY 或各自 config 指令;遇到只認其中一種的情況時,以工具官方文件為準。安裝完套件後若長期不需要代理,記得 npm config delete proxy 等,避免影響在家網路環境下的安裝速度。

Docker、Go 模組與其他常見 CLI

Docker 拉取映像時,daemon 端與客戶端行為分離:桌面版 Docker Desktop 有時可沿用系統代理,Linux 上的 dockerd 則常需在服務設定中另寫 HTTP_PROXY,與互動式 shell 的 export 不是同一層。若只有 docker pull 失敗而主機 curl 正常,請優先檢查 daemon 環境檔而非重複改 zshrc。

Go 的模組下載會尊重 GOPROXYHTTP_PROXY;在無法直連 proxy.golang.org 的網路下,除了改用公司允許的 module proxy,也可讓 go env -w GOPROXY=... 與終端代理並存,避免只改一邊仍卡在 checksum 或 metadata。Python pip 可使用 pip install --proxy 或環境變數;Rust cargo 常透過 HTTP_PROXY[http.proxy] 設定。重點仍是:確認實際發請求的那個行程有讀到代理,而不是假設「開了 Clash 就全自動」。

NO_PROXY 常見寫法對照

情境 建議寫入 NO_PROXY 的片段
本機服務與測試站 localhost,127.0.0.1,::1
內部 Git/npm registry 主機名 以逗號分隔的 FQDN,必要時含萬用字元前綴
Kubernetes、Docker 內部 DNS 該叢集專用網域與服務名稱

仍逾時時的排查順序

  1. 在 Clash 中確認規則是否將 github.comnpmjs.org 導向預期策略組,並觀察日誌是否有對應連線。
  2. 確認終端內 echo $https_proxy(或 Windows 的 echo %HTTPS_PROXY%)是否為預期 URL。
  3. 嘗試只設 HTTPS_PROXY 為 HTTP 代理 URL,避免錯用 SOCKS 導致握手異常。
  4. 若懷疑 DNS,請交叉參考 DNS 與 fake-ip 排查,排除解析與規則競合。
  5. 在伺服器或無 GUI 環境,可改參考 Linux 無頭部署,讓 Clash 本體與訂閱更新也穩定。

常見問題

只有 Git 慢,curl 正常

多半是 git config 仍指向舊代理或錯埠。請 git config --global -l | grep -i proxy 檢查並清理。

代理後出現憑證或 MITM 相關錯誤

請確認是否啟用會解密 TLS 的中間人工具;Clash 預設不替 HTTPS 解密。若公司防火牆掃描 HTTPS,需依 IT 規範匯入根憑證,與本篇代理 URL 設定無衝突但需分開處理。

已開 TUN 還需要環境變數嗎

若 TUN 已完整攔截該 shell 的流量,理論上可不設;但若您發現仍有工具繞過,保留 HTTP_PROXY 可作雙重保險。容器與遠端開發環境通常仍需顯式設定。

小結與下載

讓終端走 Clash 的核心是對齊本機監聽埠,並以 HTTP_PROXY/HTTPS_PROXY(及必要的 ALL_PROXY)讓命令列與瀏覽器共用同一套出口;Git 與 npm 再各自寫入 proxy,可減少每次手動匯出環境的負擔。與「只談 WSL2 埠轉發」不同,本篇聚焦三系統通用的 shell 與工具設定,適合日常本機開發;WSL 與宿主 IP 請另對照專文。

立即免費下載 Clash,開啟流暢上網新體驗

讓終端與瀏覽器同一出口

設定好 HTTP 與 Git 代理後,git clone、npm 與 API 工具較不易再無故逾時。

下載 Clash