pac自动代理
文章目錄
- 1.pac 定義
- 2. 參考配置地址
- 3. 實(shí)際配置案例
- 3.1 編寫pac文件
- 3.1.1 return 語(yǔ)句有三種指令:
- 3.1.2 內(nèi)置函數(shù)
- 3.1.2.1 dnsDomainIs
- 3.1.2.2 shExpMatch
- 3.1.2.3 isInNet
- 3.1.2.4 主機(jī)ip
- 3.1.2.5 dnsResolve
- 3.1.2.6 isPlainHostName
- 3.1.2.7 isResolvable
- 3.1.2.8 dnsDomainLevels
- 3.2 配置nginx,將pac文件上傳到服務(wù)器
- 3.3 配置自動(dòng)代理
1.pac 定義
PAC,一個(gè)自動(dòng)代理配置腳本,包含了很多使用 JavaScript 編寫的規(guī)則,它能夠決定網(wǎng)絡(luò)流量走默認(rèn)通道還是代理服務(wù)器通道,控制的流量類型包括:HTTP、HTTPS 和 FTP。
本質(zhì)是一段js
function FindProxyForURL(url, host) { return "DIRECT"; }2. 參考配置地址
地址:pac配置地址
3. 實(shí)際配置案例
3.1 編寫pac文件
下面這段表示的是如果是本機(jī)ip192.168.8.0網(wǎng)段的,就走192.168.2.207:443代理,如果不是的話,就直連
function FindProxyForURL(url, host) {if (isInNet(myIpAddress(), "192.168.8.0", "255.255.255.0")) {return "PROXY 192.168.2.207:443";}return "DIRECT";}3.1.1 return 語(yǔ)句有三種指令:
- DIRECT,表示無(wú)代理直接連接
- PROXY host:port,表示走h(yuǎn)ost:port 的 proxy 服務(wù)
- SOCKS host:port,表示走h(yuǎn)ost:port 的 socks 服務(wù)
3.1.2 內(nèi)置函數(shù)
3.1.2.1 dnsDomainIs
類似于 ==,但是對(duì)大小寫不敏感,
if (dnsDomainIs(host, "google.com") || dnsDomainIs(host, "www.google.com")) { return "DIRECT"; }3.1.2.2 shExpMatch
Shell 正則匹配,* 匹配用的比較多,可以是*.http://example.com,也是可以下面這樣,
if (shExpMatch(host, "vpn.domain.com") || shExpMatch(url, "http://abcdomain.com/folder/*")) { return "DIRECT"; }3.1.2.3 isInNet
判斷是否在網(wǎng)段內(nèi)容,比如 10.1.0.0 這個(gè)網(wǎng)段,10.1.1.0 就在網(wǎng)段中,
if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0")) { return "DIRECT"; }3.1.2.4 主機(jī)ip
if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0")) { return "PROXY 10.10.5.1:8080"; }3.1.2.5 dnsResolve
通過(guò) DNS 查詢主機(jī) ip,
if (isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") || isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") || isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") || isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0")) { return "DIRECT"; }3.1.2.6 isPlainHostName
判斷是否為諸如http://barret/,http://server-name/ 這樣的主機(jī)名,
if (isPlainHostName(host)) { return "DIRECT"; }3.1.2.7 isResolvable
判斷主機(jī)是否可訪問
if (isResolvable(host)) { return "PROXY proxy1.example.com:8080"; }3.1.2.8 dnsDomainLevels
返回是幾級(jí)域名,比如dnsDomainLevels(http://barretlee.com) 返回的結(jié)果就是 1,
if (dnsDomainLevels(host) > 0) { return "PROXY proxy1.example.com:8080"; } else { return "DIRECT"; }3.2 配置nginx,將pac文件上傳到服務(wù)器
本案例放置pac文件的路徑
nginx 配置
location /proxy.pac {alias /usr/local/openresty/nginx/pac/proxy.pac; //絕對(duì)路徑}3.3 配置自動(dòng)代理
總結(jié)
- 上一篇: cmd:发生系统错误 5。拒绝访问解决方
- 下一篇: 读书的方法 张五常