本文介紹如何為自己的終端設置代理,從而實現在命令行中訪問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請求轉換為socks5請求,並轉發給本地的ss-local服務,ss-local服務通過socks5協議發送加密過的請求數據到遠端的SS server,SS server解密請求數據后,將真實的請求
https://www.google.com
發送到Google的服務器 - 上圖是privoxy的配置文件,privoxy的監聽地址是:
127.0.0.1:1087
,轉發地址是:127.0.0.1:1080
- 終端軟件iterm/iterm2等默認是沒有設置請求代理,因此無法訪問
https://www.google.com
3. 解決方案
- http_proxy和https_proxy環境變量用於指定客戶端程序(如curl和wget)的代理設置
- 通過下面的環境變量就可以設置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'