️This article has been over 1 years since the last update.
Gradle下载jar包慢到飞起?Github同步一半断了?Docker下载频繁报错?是时候为你的终端统一设置一个代理了。本文以Mac(Unix平台)与HTTP_PROXY为例,讲解如何在终端下进行配置代理。
1. 选择Proxy
首先,要购买挑选一个Proxy,购买前需要注意服务商需要能够提供Http Proxy,或者使用转换工具配合SS
AD: 我目前使用的服务器商AFF地址 ,一定不要年付,防止跑路
2. 配置终端
2.1. 打开终端Terminal
| 1 | # 检查当前Shell | 
.bash_profile 可以理解为Term打开后能够自动执行的脚本文件
2.2. 在文本中添加如下内容
| 1 | #proxy | 
2.3. 保存配置
重启shell即可
该方法配置好后,在IDEA等工具的
终端下同样有用,但是IDEA本身的maven, gradle需要再次配置
3. 使用
打开终端后,默认会提示正在使用默认的$defp地址
| 1 | current proxy is http://127.0.0.1:8123 | 
当不需要时,可以执行noproxy以取消
| 1 | noproxy | 
当然可以在某些情况下手动修改地址
| 1 | setproxy $depf | 
4. 查看效果
我们可以执行curl的命令,此网站会自动告诉了你当前的位置
| 1 | curl https://ifconfig.co/country | 
我们也可以使用wget/curl进行SpeedTest
| 1 | 测试下载(run speed test) | 
最难折腾的Gradle现在也飞速了
| 1 | 折腾Gradle项目 | 
最后,体验Git,Brew,Gradle等工具的飞速下载吧!
注意:
- 亲测Go,Git over HTTP ,Brew,Curl,Wget,NPM是可以正常使用的,可以达到物理带宽
- 不支持
git://与svn://,那两个是基于socket的,你可以使用cow/ss配置- 如果需要设置内网地址的正则(比如192,10,172),目前暂时没有完美的方案,只能枚举并手动加入
no_proxy中- Gradle是java相关的,用的不是curl,所以需要
JAVA_OPTS作为环境变量,注意这个环境变量只是终端的,而不是IDE下的
附录
Cow的配置
| 1 | $ vi ~/.cow/rc | 
可以配置plist使它自动启动
Git-ssh配置
需要配置如下
| 1 | # 编辑 或 创建 文件,如下位置 ~/.ssh/config | 
Intellij下的Gradle/maven配置
虽然本文讲的是Terminals的Proxy,但是Intellij的用户也很多。因此也介绍下吧
首先打开Preference,点击
| 1 | Build,Execution,Deployment > Build Tools > Gradle | 
配置Gradle VM options(以polipo为例,使用其它工具的自己改端口)
下文的-d表示啰嗦模式,如果你确认已经ok,可以把它删除。
| 1 | -Dhttp.proxyHost=localhost -Dhttp.proxyPort=8123 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=8123 -d | 
这样你用鼠标点击Build后,它就会自动走代理了
我个人更推荐直接在终端里跑完(比如mvn package),然后再打开IDEA,这时所有的依赖已经下载完了
清空DNS缓存
如果仍然无法连接,试试清空DNS。尤其是Git的SSH,非常容易被中间人入侵。
| 1 | # 处理DNS投毒遗留缓存 | 
Docker配置
Docker分为三种
- 下载Docker镜像:在Mac下推荐使用虚拟机,然后基于Linux进行配置即可,个人更推荐直接配置mirror(比如daocloud),或者搭建一个Harbor/Artifactory作为前置代理。
- Dockerfile本身构建:考虑在RUN中硬编码配置apt/yum的mirror,或者-e传入HTTP_PROXY环境。过程中需要下载的第三方二进制也建议通过Artifactory私服实现缓存中转。
- Docker容器内部程序运行:不推荐跑在Mac上,建议部署到K8S中走透明网关。
总体来说,更推荐使用Artifactory私服来进行全局的Docker/yun/二进制等缓存。如果有企业级安全的单向通道需求,欢迎讨论方案。
配置Mirror
如果你舍不得流量,可以使用mirror而不用代理,比如HuaweiCloud Mirror
PAC与ACL的区别
如下为分类
- 手动模式:不配置任何ACL/PAC,均在应用侧(比如mvn/SwitchyOmega/HTTP_PROXY)等手动配置方法进行切换,比如如下是配置了专门开一个火狐上外网,safari只用来上内网,npm下载全部走外网。这个方案也是大型IT企业的外网安全审计方案。
- 白名单(bypass)模式:所有流量经过本地socket后,ss侧进行判断,假定所有的国外 IP 都被 GFWed,国外全部代理
不推荐使用的:多个规则混在一起,难以分析定位
- PAC模式:将判断先交给浏览器,再扔给ss客户端,这里流程变复杂了,而且pac是维护的proxylist,需要频繁更新
- 全局模式:所有流量(理论上包括系统更新/下载/QQ/音乐等)都经过本地socket后,全部走外网,也就是所谓的Digital nomad。然而事实上很多应用无法透明地支持(比如curl),因此比较鸡肋。这种场景建议把国内应用扔到虚拟机中,并做二级代理。
- ACL自动:版本与实现非常混乱,不推荐折腾