Linux下web Pacproxy的用法

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

image-20211116132624536

看图,中间的是前端代理,地址是 192.168.1.1:8080,然后客户设置使用这个代理

1export http_proxy=http://192.168.1.1:8080
2export https_proxy=http://192.168.1.1:8080

然后对应后端有三个代理,两个 http 代理,一个 socks 代理

1http  192.168.2.1:3128
2socks 192.168.2.2:1080
3http  192.168.2.3:3128

我们要根据客户的请求 URL 来决定具体要使用后端的哪个代理

这个如果在浏览器上设置非常容易,设置 PAC 即可。但是偏偏客户端不是浏览器,而是一个程序,那么麻烦就来了。怎么设置呢?

步骤很简单:

一、安装 pacproxy

网址:https://github.com/williambailey/pacproxy

1wget https://github.com/williambailey/pacproxy/releases/download/v.2.0.4/pacproxy_2.0.4_linux_amd64.tar.gz
2tar zxvf pacproxy_2.0.4_linux_amd64.tar.gz

拷出来 pacproxy 备用

二、生成配置文件

最主要的就是 PAC 文件的生成

我们给个例子:

 1cat << EOF >> pac
 2function FindProxyForURL(url, host)
 3{
 4    if (host == "www.baidu.com") {
 5        return "PROXY 192.168.2.1:3128";
 6    }
 7    else if (host == "www.sina.com.cn") {
 8        return "SOCKS 192.168.2.2:1080";
 9    }
10    else if (host == "www.sohu.com") {
11        return "SOCKS 192.168.2.3:1080";
12    }    
13    else {
14        return "DIRECT";
15    }
16}
17EOF

其实 PAC 文件的内容就是一段 javascript,用来返回代理的地址

运行并测试:

1pacproxy -c pac -l 0.0.0.0:8080 -v
2
3
4export http_proxy=http://192.168.1.1:8080
5export https_proxy=http://192.168.1.1:8080
6curl -I www.baidu.com

这样就在 Linux 搭建了一个动态的 PAC 代理

PAC文件的参考资料:


Tomcat Server.xml配置详细解释
CentOS7的救援模式和紧急模式
comments powered by Disqus