平时上网一般只需要设置浏览器的代理即可,遇到特殊的网站可以开启全局代理解决。
但有时候在终端控制台下也会遇到访问慢的问题,特别是在终端下使用 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 proxy='export http_proxy=http://127.0.0.1:1087;export https_proxy=http://127.0.0.1:1087;' |
之后执行 source ~/.zshrc 使配置生效。
那么,启用和关闭终端下的代理则执行 proxy 和 unproxy 即可。
对 http 方式代理进行测试,发现以下情况都会使用代理ip来访问。
curl ifconfig.co/json:有效curl ip.sb:有效curl cip.cc:有效
总结
总结一下就是,最终选择 http 方式来设置终端代理。

