給 iTerm 終端設定代理
阿新 • • 發佈:2020-02-23
本文介紹如何為自己的終端設定代理,從而實現在命令列中訪問Google。
1. 背景
當你使用SS FQ時,大部分瀏覽器都可以成功訪問Google,但是在命令列下執行curl https://www.google.com
時,會超時失敗。對於類似的這種情況,本文將解釋出現這種現象的原因,並給出有效的解決方案。
2. 原因
- 啟動SS時,會建立兩個代理,一個是ss-local,一個是privoxy;ss-local用於代理socks5請求,privoxy用於代理所有的HTTP請求
- 啟動SS時,不管用PAC模式還是全域性模式,都會修改網路系統代理設定
- 網路系統代理設定從哪裡看?Mac:系統偏好設定-->網路-->高階-->代理
- 在代理頁中可以看到
- 從上圖可以看到,網頁代理伺服器是一個部署在本地的代理伺服器
- 這個本地代理伺服器實際上是SS啟動時建立的,我們可以從SS的HTTP代理設定中看到
- 大部分瀏覽器的預設代理設定是系統代理
- 因此瀏覽器訪問
https://www.google.com
時,實際上是把請求傳送給了SS建立的本地代理伺服器127.0.0.1:1087
- 上圖的privoxy就是SS建立的本地HTTP代理伺服器
127.0.0.1:1087
- privoxy會把接收到的http/https請求轉發給本地的ss-local服務,ss-local服務通過socks5協議傳送加密過的請求資料到遠端的SS server,SS server解密請求資料後,將真實的請求
https://www.google.com
- 上圖是privoxy的配置檔案,privoxy的監聽地址是:
127.0.0.1:1087
,轉發地址是:127.0.0.1:1080
- 終端軟體iterm/iterm2等預設是沒有設定請求代理,因此無法訪問
https://www.google.com
3. 解決方案
通過下面的環境變數就可以設定HTTP代理:
export http_proxy=http://127.0.0.1:8087 export https_proxy=$http_proxy
為了能夠快速切換代理,可以在 ~/.zshrc 或者 ~/.bash_profile 中新增這樣的alias:
alias goproxy='export http_proxy=http://127.0.0.1:8087 https_proxy=http://127.0.0.1:8087' alias disproxy='unset http_proxy https_proxy'
4. 參考資料
- 給 iTerm 終端設定代理
- 利用 Privoxy 讓命令列下的 wget 和 curl 等命令實現自動代理