在Mac终端下配置Proxy
2015-11-21に投稿

Gradle下载jar包慢到飞起?Github同步一半断了?Docker下载频繁报错?是时候为你的终端统一设置一个代理了。本文以Mac(Unix平台)与HTTP_PROXY为例,讲解如何在终端下进行配置代理。

本文章属于笔记类型,质量远不如技术类文章,但是网上关于此内容的靠谱信息实在不多,故记录下来。

1. 选择Proxy

首先,要购买挑选一个Proxy,购买前需要注意服务商需要能够提供Http Proxy,或者使用Cow配合SS

2. 配置终端

2.1. 打开终端Terminal

1
2
3
4
# 用bash的终端使用这个文件
open -t ~/.bash_profile
# 如果用zsh的话,用下面的文件,没有就新建一个文件
open -t ~/.zshenv

.bash_profile 可以理解为Term打开后能够自动执行的脚本文件

2.2. 在文本中添加如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#proxy 
LANTERN='127.0.0.1:8787'
# 需要手动开启
SS='127.0.0.1:1087'
COW='127.0.0.1:7777'
POLIPO='127.0.0.1:8123'
defp=$POLIPO

# No Proxy
function noproxy
{
unset http_proxy HTTP_PROXY https_proxy HTTPS_PROXY all_proxy ALL_PROXY ftp_proxy FTP_PROXY dns_proxy DNS_PROXY JAVA_OPTS GRADLE_OPTS MAVEN_OPTS
echo "clear proxy done"
}

function setproxy
{
if [ $# -eq 0 ]
then
inArg=$defp
else
inArg=$1
fi
HOST=$(echo $inArg |cut -d: -f1)
PORT=$(echo $inArg |cut -d: -f2)
http_proxy=http://$HOST:$PORT
HTTP_PROXY=$http_proxy
all_proxy=$http_proxy
ALL_PROXY=$http_proxy
ftp_proxy=$http_proxy
FTP_PROXY=$http_proxy
dns_proxy=$http_proxy
DNS_PROXY=$http_proxy
https_proxy=$http_proxy
HTTPS_PROXY=$https_proxy
JAVA_OPTS="-Dhttp.proxyHost=$HOST -Dhttp.proxyPort=$PORT -Dhttps.proxyHost=$HOST -Dhttps.proxyPort=$PORT"
GRADLE_OPTS="-Dgradle.user.home=$HOME/.gradle"
MAVEN_OPTS=$JAVA_OPTS
no_proxy=".cn,.aliyun.com,localhost,127.0.0.1,localaddress,.huaweicloud.com,.localdomain.com,.coding.net,192.168.99.100,.ruby-china.org"
echo "current proxy is ${http_proxy}"
export no_proxy http_proxy HTTP_PROXY https_proxy HTTPS_PROXY all_proxy ALL_PROXY ftp_proxy FTP_PROXY dns_proxy DNS_PROXY JAVA_OPTS GRADLE_OPTS MAVEN_OPTS
}

setproxy

2.3. 保存配置

重启shell即可

该方法配置好后,在IDEA等工具的终端下同样有用,但是IDEA本身的maven, gradle需要再次配置

3. 使用

打开终端后,默认会提示正在使用默认的$defp地址

1
current proxy is http://127.0.0.1:8123

当不需要时,可以执行noproxy以取消

1
2
$ noproxy 
clear proxy done

当然可以在某些情况下手动修改地址

1
2
3
4
5
6
$ setproxy $depf
current proxy is http://127.0.0.1:8123
$ setproxy $LANTERN
current proxy is http://127.0.0.1:8787
$ setproxy 127.0.0.1:443
current proxy is http://127.0.0.1:443

4. 查看效果

我们可以执行curl的命令,此网站会自动告诉了你当前的位置

1
2
$ curl https://ifconfig.co/country
Hong Kong

我们也可以使用wget/curl进行SpeedTest

1
2
# 测试下载(run speed test)
$ wget -O /dev/null http://speedtest-sfo1.digitalocean.com/10mb.test

最难折腾的Gradle现在也飞速了

1
2
# 折腾Gradle项目
$ gradle package -d

最后,体验Git,Brew,Gradle等工具的飞速下载吧!

注意:

  1. Mac的Docker环境下需要在虚拟机/VPS中进行配置Proxy,强烈推荐直接用Liunx的VM来搞,不要折腾Docker for Mac
  2. 亲测Go,Git,Brew,Curl,Wget,NPM是可以正常使用的,可以达到物理带宽
  3. 不支持git://svn://,那两个是基于socket的,你可以使用Cow配置
  4. 如果需要设置内网地址的正则(比如192,10,172),目前暂时没有完美的方案,只能枚举并手动加入no_proxy
  5. Gradle是java相关的,用的不是curl,所以需要JAVA_OPTS作为环境变量,注意这个环境变量只是终端的,而不是IDE下的

附录

Cow的配置

1
2
3
4
5
$ vi ~/.cow/rc
# uncomment
alwaysProxy=true
# 启动
$./cow --debug

可以配置plist使它自动启动

polipo的配置

这个主要是配合$$使用的,是目前的主流手段,安装后执行如下命令即可

1
2
3
4
# 安装polipo
brew install polipo
# 执行Socket转换
polipo socksParentProxy=localhost:1080

AD: 我目前使用的服务器商AFF地址,一定不要买多,防止跑路

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

1
2
# 处理DNS投毒遗留缓存
sudo killall -HUP mDNSResponder

Docker配置

在Mac下推荐使用VM Fusion的vctl,直接使用上文的环境变量即可

配置Mirror

如果你舍不得钱,可以使用mirror而不用代理,比如HuaweiCloud Mirror