平时上网一般只需要设置浏览器的代理即可,遇到特殊的网站可以开启全局代理解决。
但有时候在终端控制台下也会遇到访问慢的问题,特别是在终端下使用 git clone
拉取 GitHub
上的仓库时经常会遇到 403Forbidden
的情况。
如果你有使用 ohmyzsh
的话,感受应该会很深刻:几乎每次 ohmyzsh
需要升级时,都会遇到 403
的问题。
这是因为一些终端下的命令如 git
、wget
、curl
、brew
等,是不会默认走代理的,即使设置的是全局代理。
解决这个问题最好的方式就是 为终端启用代理。
选择哪种代理方式
一般的代理工具如 Shadowsocks
、V2Ray
等,都是支持 http/socks5
两种代理方式的,那我们应该选择哪种呢?
socks5方式
socks5
代理方式,可以通过 ALL_PROXY
参数值来设置。
编辑 ~/.zshrc
文件,假设代理工具的 socks5
端口为 1080
,则:
1 | alias proxys5='export ALL_PROXY=socks5://127.0.0.1:1080' |
之后执行 source ~/.zshrc
使配置生效。
那么,启用和关闭终端下的代理则执行 proxys5
和 unproxys5
即可。
测试一下,默认情况下:
1 | ➜ curl ip.sb |
启用终端下代理再次测试:
1 | ➜ proxys5 |
如果看到获取到的ip变了,则说明 socks5
终端代理配置生效了。
socks5方式的不足
经过我的测试发现,使用 socks5
代理方式,请求某些ip时无效,也就是不会使用代理ip来访问。
如下的测试结果:
curl ifconfig.co/json
:有效curl ip.sb
:有效curl cip.cc
:无效
后来我了解到:
终端下很多工具目前只支持
http
和https
等协议,对socks5
协议支持不够好。
那改用 http
方式测试一下。
http方式
http
方式需要通过 http_proxy
和 https_proxy
两个参数来配置。
编辑 ~/.zshrc
文件,假设代理工具的 http
端口为 1087
,则:
1 | alias proxyhp='export http_proxy=http://127.0.0.1:1087;export https_proxy=http://127.0.0.1:1087;' |
之后执行 source ~/.zshrc
使配置生效。
那么,启用和关闭终端下的代理则执行 proxyhp
和 unproxyhp
即可。
对 http
方式代理进行测试,发现以下情况都会使用代理ip来访问。
curl ifconfig.co/json
:有效curl ip.sb
:有效curl cip.cc
:有效
总结
总结一下就是,最终选择 http
方式来设置终端代理。