給 iTerm 終端設置代理


本文介紹如何為自己的終端設置代理,從而實現在命令行中訪問Google。

1. 背景

當你使用SS FQ時,大部分瀏覽器都可以成功訪問Google,但是在命令行下執行curl https://www.google.com時,會超時失敗。對於類似的這種情況,本文將解釋出現這種現象的原因,並給出有效的解決方案。

2. 原因

  1. 啟動SS時,會創建兩個代理,一個是ss-local,一個是privoxy;ss-local用於代理socks5請求,privoxy用於代理所有的HTTP請求
  2. 啟動SS時,不管用PAC模式還是全局模式,都會修改網絡系統代理設置
    1. 網絡系統代理設置從哪里看?Mac:系統偏好設置-->網絡-->高級-->代理
    2. 在代理頁中可以看到
    3. mac的網絡代理設置
    4. 從上圖可以看到,網頁代理服務器是一個部署在本地的代理服務器
    5. 這個本地代理服務器實際上是SS啟動時創建的,我們可以從SS的HTTP代理設置中看到
    6. SS的HTTP代理設置
  3. 大部分瀏覽器的默認代理設置是系統代理
    1. Firefox的網絡代理設置
    2. 因此瀏覽器訪問https://www.google.com時,實際上是把請求發送給了SS創建的本地代理服務器127.0.0.1:1087
    3. SS的兩個代理進程
    4. 上圖的privoxy就是SS創建的本地HTTP代理服務器127.0.0.1:1087
    5. privoxy會把接收到的http/https請求轉換為socks5請求,並轉發給本地的ss-local服務,ss-local服務通過socks5協議發送加密過的請求數據到遠端的SS server,SS server解密請求數據后,將真實的請求https://www.google.com發送到Google的服務器
    6. ss-local-config
    7. 上圖是privoxy的配置文件,privoxy的監聽地址是:127.0.0.1:1087,轉發地址是:127.0.0.1:1080
  4. 終端軟件iterm/iterm2等默認是沒有設置請求代理,因此無法訪問https://www.google.com

3. 解決方案

  1. http_proxy和https_proxy環境變量用於指定客戶端程序(如curl和wget)的代理設置
  2. 通過下面的環境變量就可以設置HTTP代理:
export http_proxy=http://127.0.0.1:8087
export https_proxy=$http_proxy
  1. 為了能夠快速切換代理,可以在 ~/.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. 參考資料

  1. 給 iTerm 終端設置代理
  2. 利用 Privoxy 讓命令行下的 wget 和 curl 等命令實現自動代理
  3. How to set up proxy using http_proxy & https_proxy environment variable in Linux?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM