pac自动代理
文章目錄
- 1.pac 定義
- 2. 參考配置地址
- 3. 實際配置案例
- 3.1 編寫pac文件
- 3.1.1 return 語句有三種指令:
- 3.1.2 內置函數
- 3.1.2.1 dnsDomainIs
- 3.1.2.2 shExpMatch
- 3.1.2.3 isInNet
- 3.1.2.4 主機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文件上傳到服務器
- 3.3 配置自動代理
 
1.pac 定義
PAC,一個自動代理配置腳本,包含了很多使用 JavaScript 編寫的規則,它能夠決定網絡流量走默認通道還是代理服務器通道,控制的流量類型包括:HTTP、HTTPS 和 FTP。
本質是一段js
function FindProxyForURL(url, host) { return "DIRECT"; }2. 參考配置地址
地址:pac配置地址
3. 實際配置案例
3.1 編寫pac文件
下面這段表示的是如果是本機ip192.168.8.0網段的,就走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 語句有三種指令:
- DIRECT,表示無代理直接連接
- PROXY host:port,表示走host:port 的 proxy 服務
- SOCKS host:port,表示走host:port 的 socks 服務
3.1.2 內置函數
3.1.2.1 dnsDomainIs
類似于 ==,但是對大小寫不敏感,
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
判斷是否在網段內容,比如 10.1.0.0 這個網段,10.1.1.0 就在網段中,
if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0")) { return "DIRECT"; }3.1.2.4 主機ip
if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0")) { return "PROXY 10.10.5.1:8080"; }3.1.2.5 dnsResolve
通過 DNS 查詢主機 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/ 這樣的主機名,
if (isPlainHostName(host)) { return "DIRECT"; }3.1.2.7 isResolvable
判斷主機是否可訪問
if (isResolvable(host)) { return "PROXY proxy1.example.com:8080"; }3.1.2.8 dnsDomainLevels
返回是幾級域名,比如dnsDomainLevels(http://barretlee.com) 返回的結果就是 1,
if (dnsDomainLevels(host) > 0) { return "PROXY proxy1.example.com:8080"; } else { return "DIRECT"; }3.2 配置nginx,將pac文件上傳到服務器
本案例放置pac文件的路徑
nginx 配置
location /proxy.pac {alias /usr/local/openresty/nginx/pac/proxy.pac; //絕對路徑}3.3 配置自動代理
總結
 
                            
                        - 上一篇: cmd:发生系统错误 5。拒绝访问解决方
- 下一篇: 读书的方法 张五常
