前言
國內的開發者或多或少都會因為網路而煩惱,因為一些特殊原因有時候網路不好的時候需要使用代理才能完成對應的操作,原來我一直都是使用斐訊路由器然后刷了梅林的韌體,直接在路由器層面設定轉發代理,把一些國內網路不好的網站都走代理,這樣的好處就是不用每臺設備都設定ssr,
后來作業了,就沒這么方便了,但是作業設備也比較固定嘛,開一下ssr也不費事,后來我發現一個怪事,同樣是一個git地址,chrome訪問正常可以zip下載,但是在終端里面一直503,后來查詢資料才了解到,原來ssr的代理沒有辦法在終端生效,這樣很多東西都非常麻煩,更新on myzsh看運氣,在homebrew下載東西基本都掛,git克隆看天氣,docer下載鏡像等半天,使用國內各種為愛發電鏡像源也是參差不齊,怎么用怎么不爽,非常影響開發,于是研究了一下,在這這記錄下來,
查看是否生效
因為后面會用到,所以提前說一下,因為要確認是否代理成功,我們可以使用curl這個命令,然后去獲取一些公益檢測ip的網站,curl后網站會回傳你訪問它的這個公網ip,從而可以檢測你是否代理成功,下面提供兩個,因為有時候網站會掛掉(畢竟為愛發電網站)
curl cip.cc
curl ip.sb

為什么終端不會走代理
可以確定的是在mac下(其實win也是不會)使用ssr代理后不管是開全域還是按照規則在終端都不會生效,但是關于原因眾說紛紜,大家都比較認可的理由是ssr代理類軟體默認是代理socket5,而終端是http,真的是這樣嗎,我們來看看
我們設定規則代理,然后檢查一下規則里面代理的協議,可以看到確實是socket5


但是當我設定成全域代理,并且打開ssr的http代理設定以后,其實終端里面也不會成功,并沒有什么*用


那到底是什么理由呢,其實我也不知道,但是我更同意stackExchange一位大佬給出的解釋,他說mac的shell和系統設定是兩套規則,shell是先于macOS誕生,在系統設定里面的設定代理在終端其實是不會生效的,系統也不會幫你去按照終端規則去設定一下,如果想要終端代理生效,需要單獨對終端進行操作,

我為什么會比較認同呢,是因為ssr本身其實就是開了一個本地的代理服務,你給它這個固定埠發過去的請求它才會進行代理轉發然后回傳,系統設定確實設定了網路的轉發到這個埠,但是可能這個設定不會對終端生效,如果需要終端生效需要單獨對終端設定,把終端里面的網路請求都轉發到ssr啟動的這個埠上,
設定終端走代理
終端設定完全真正的代理需要配合插件,比較麻煩,而且...主要是我自己設定代理都是一些臨時性的需求,所以這里介紹一個簡單的代理方法,
主流shell中都有好幾個代理的系統變數,大多數的應用都遵循它,這里簡單說三個,這里使用了export的命令,我在另外一篇文章里面說過,大家可以去翻一下,這個命令在當前的shell視窗中設定一個系統環境變數,這個變數只在當前shell視窗中生效,關閉再重新打開一個shell視窗以后這個系統環境將失效,如果想要一直代理可以把這個環境變數寫入到啟動檔案中(例如~/.zshrc),啟動檔案介紹我也寫過一篇文章,大家可以翻一下,
# 代理http
export http_proxy="socks5://127.0.0.1:1080"
# 代理https
export https_proxy="socks5://127.0.0.1:1080"
# 代理所有協議,其中包括ftp等
export ALL_PROXY="socks5://127.0.0.1:1080"
其中的原因大家可以瀏覽參考中的2和3,常見的軟體命令都會使用這個系統環境變數,如果為空則直連如果有值則會轉發到這個變數的代理上,其中git還提供應用變數設定,設定它可以單純的讓git每次都走你設定的代理,并且每次打開都會生效,因為這是git的軟體全域設定
# 設定如下
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
# 取消如下
git unset http_proxy
git unset https_proxy
設定成功后,再進行檢測,已經代理到線路上面的ip、

結合alias做到靈活代理
如果你看過我原來寫過的介紹linux快捷指令的文章,你可以結合其中的alias來完成更加靈活的代理,因為考慮到我們的使用場景,除了前面git可以單獨配置應用的全域以后,我們好像在終端中不是那么需要始終的代理設定,確實代理的帶寬和延遲上都沒有直連好,但是有時候需要的工具或者框架服務器又在國外,不得不開代理,
雖然上面的命令可以解決這個問題,但是我很懶,然后每次執行上面一大堆命令,非常麻煩,使用alias設定一個快捷命令,然后每次輸入就可以開啟,用完關閉視窗下次再進來這個代理失效,只有需要的時候輸入一下,不用輸入一大串(往往這種命令,你都要打開記事本,然后復制粘貼)
alias ladder='export http_proxy=http://127.0.0.1:1087'

參考
- 為什么terminal終端不能使用系統代理
- git config httpproxy
- using-homebrew-behind-a-proxy
更多有意思的文章歡迎大家來我的個人blog挖掘,點擊這里
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/393228.html
標籤:其他
上一篇:MacOS設定終端代理
