说实在话,这个场景非常怪异,客户在 linux 下要动态根据 url 选择代理:

看图,中间的是前端代理,地址是 192.168.1.1:8080,然后客户设置使用这个代理
export http_proxy=http://192.168.1.1:8080
export https_proxy=http://192.168.1.1:8080
然后对应后端有三个代理,两个 http 代理,一个 socks 代理
http 192.168.2.1:3128
socks 192.168.2.2:1080
http 192.168.2.3:3128
我们要根据客户的请求 URL 来决定具体要使用后端的哪个代理
这个如果在浏览器上设置非常容易,设置 PAC 即可。但是偏偏客户端不是浏览器,而是一个程序,那么麻烦就来了。怎么设置呢?
步骤很简单:
一、安装 pacproxy
网址:https://github.com/williambailey/pacproxy
wget https://github.com/williambailey/pacproxy/releases/download/v.2.0.4/pacproxy_2.0.4_linux_amd64.tar.gz
tar zxvf pacproxy_2.0.4_linux_amd64.tar.gz
拷出来 pacproxy 备用
二、生成配置文件
最主要的就是 PAC 文件的生成
我们给个例子:
cat << EOF >> pac
function FindProxyForURL(url, host)
{
if (host == "www.baidu.com") {
return "PROXY 192.168.2.1:3128";
}
else if (host == "www.sina.com.cn") {
return "SOCKS 192.168.2.2:1080";
}
else if (host == "www.sohu.com") {
return "SOCKS 192.168.2.3:1080";
}
else {
return "DIRECT";
}
}
EOF
其实 PAC 文件的内容就是一段 javascript,用来返回代理的地址
运行并测试:
pacproxy -c pac -l 0.0.0.0:8080 -v
export http_proxy=http://192.168.1.1:8080
export https_proxy=http://192.168.1.1:8080
curl -I www.baidu.com
这样就在 Linux 搭建了一个动态的 PAC 代理
PAC文件的参考资料: