終端機不吃系統代理
系統代理只對遵守系統設定的程式有效。絕大多數命令列工具不讀它,它們看的是 http_proxy 與 https_proxy 環境變數,或自己的設定檔。所以開著系統代理、瀏覽器一切正常,git clone 照樣逾時,這是正常現象,不是用戶端壞了。
有兩個例外要先記住:TUN 模式在網路層接管流量,命令列工具不設定也能走;而 SSH 任何時候都不認 http_proxy,必須用 ProxyCommand。
依工具分別設定
- 1
臨時生效:環境變數
Linux 與 macOS 用 export https_proxy 和 http_proxy 指向 http://127.0.0.1:7897;PowerShell 用 $env:HTTPS_PROXY 給同樣的值。只對目前視窗有效,關掉就沒了。要長期生效請寫進 .bashrc 或 PowerShell 設定檔。
- 2
Git
git config --global http.proxy 加上代理位址,https 同理。只想讓 GitHub 走代理,用帶網域前綴的寫法:git config --global http.https://github.com/.proxy。取消加 --unset。
- 3
npm 與 pip
npm config set proxy 設的是代理,registry 是換來源,兩件事別混。pip 用 --proxy 參數臨時指定,或寫進 pip.conf;在台灣裝套件時換來源通常比走代理快。
- 4
SSH
在 ~/.ssh/config 裡替對應 Host 加一行 ProxyCommand。Linux 與 macOS 常用 nc -X 5 -x 走 SOCKS5,Windows 可以用 Git 附帶的 connect 工具。
驗證與常見寫錯的地方
跑一次 curl 存取 ipinfo.io/ip,回傳的位址是節點 IP 就代表生效了。如果 curl 通但 git 不通,用 git config --global --get http.proxy 單獨確認那份設定。
- https_proxy 的值以 http:// 開頭,不是 https://,那指的是代理伺服器自己的協定
- 位址結尾不要加斜線,也不要帶路徑
- 用 no_proxy 排除 localhost、127.0.0.1 與公司內部網域
常見問題
設了環境變數還是 connection refused?
依機率排:連接埠寫錯、用戶端沒在執行、寫成了 https:// 開頭。先確認用戶端介面顯示的混合連接埠和你填的一致。
設定代理之後內部網址連不上?
把內部網域與網段加進 no_proxy,例如 localhost、127.0.0.1 以及內部網域後綴。Git 與 npm 也有各自的 noproxy 設定項目。