一 简介

1.1 什么是PAC文件

代理自动配置(PAC)文件包含一组用javaScript编码的规则,允许web浏览器确定是将Web流量直接发送到Internet还是通过代理服务器发送
        RAC文件可以控制Web浏览器处理HTTP,HTTPS和FTP流量的方式
        使用RAC文件的好处
        受所有的主要操作系统和浏览器支持
        无论用户是输入域还是输入IP地址,都能正确的自动路由流量
        自动代理故障转移

意味着,当正在部署云安全服务,是哟了那个PAC文件,内部流量见直接传输,并且可以根据需要考虑和路由该逻辑的任何和异常,一旦涉及并部署了PAC文件,任何持续的维护都是直截了当的

PAC文件能做什么
        PAC文件可以利用一下信息来路由流量的规则
        请求的网站的IP地址
        所请求的网站的主机
        用户的IP地址
        日期和时间
此外,PAV文件可以路由:
        web浏览器中的http,HTTPS和FTP流量,直接或通过dialing路由流量(主机名个端口可配置)

PAC的限制
        PAC文件在浏览器沙箱中运行,因此无法访问整个JavaScript编程语言。相反,PAC文件功能在浏览中实现具有自定义沙河的功能
        无法访问计算机的主机名
        没有可靠的方法来确定用户的IP地址
        代理故障转移缺乏智能,并根据发生的TCP超市进行操作

1.2 WPAD简介

web代理自动发现协议(Web Proxy Auto-Discovery -WPAD)是一种帮助Web浏览器使用DNS或DHCP自动检测PAC文件位置的技术。

支持DHCP和DNS的浏览器将首先尝试使用DHCP查找PAC文件,如果不存在DHCP配置,则会发生故障转移到DNS WPAD。如果两者均未配置,则浏览器将失败打开。

DHCP WPAD是一种通过利用本地DHCP基础结构来检测PAC文件位置的方法。DHCP服务器可以配置有存储PAC文件位置的选项,Web浏览器可以查询该选项。找到该选项后,Web浏览器将发出PAC文件请求。

先决条件包括PAC文件,Web服务器,DHCP服务器,以及要配置为从DHCP服务器获取其网络IP地址信息的任何用户计算机。

例如:

在以下示例中,用户计算机的网络名称为laptop01.us.division.company.com。

加载后,Web浏览器会发出DHCPINFORM,请求DHCP服务器提供选项及其配置列表。

DHCP服务器使用DHCP ACK消息进行响应,其中包含选项和配置列表

其中一个选项252包含PAC文件位置。Web浏览器可以执行下载PAC文件的请求。

DNS WPAD

DNS WPAD是检测经由PAC文件的方法发现通过利用用户计算机的网络名称,并使用一个一致的DNS配置和PAC脚本文件名。DNS WPAD是受支持最广泛的方法,支持所有主流浏览器和操作系统。

先决条件包括PAC文件,Web服务器和指向Web服务器的本地访问DNS主机名。

在以下示例中,用户计算机的网络名称为laptop01.us.division.company.com。

主机wpad.company.com上的Web服务器正在提供文件名为wpad.dat的 PAC文件。

启用DNS WPAD的浏览器将删除计算机名称(laptop01),将wpad应用于网络名称,并将后缀应用于文件资源/wpad.dat,例如http://wpad.us.division.company.com /wpad.dat。

浏览器将尝试从位置http://wpad.us.division.company.com/wpad.dat下载PAC文件。

如果Web浏览器无法解析主机wpad.us.division.company.com,它将进入子域节点层次结构并尝试从主机wpad.division.company.com下载wpad.dat文件,依此类推,直到达到最低有效节点wpad.company.com。

二、PAC 文件编码

2.1 示例PAC文件

所有优秀的PAC文件的基础都已清晰简洁的编码方法开始。使用几种不同的方法可以实现相同的结果。包括可用的PAC文件功能和睿Javascript语言的灵活性

特征

专用IP网络,内部主机名具有.local域扩展名的主机代理绕过规则。

虽然示例中的其他规则可能是可选的,但大多数部署应该从西代码块开始

示例主机名绕过规则

示例协议和URL绕过规则

示例基于机器的IP路由规则

默认代理规则,如果以上的规则都不匹配

示例PAC文件

function FindProxyForURL(url, host) {

// If the hostname matches, send direct.
if (dnsDomainIs(host, "intranet.domain.com") ||
shExpMatch(host, "(*.abcdomain.com|abcdomain.com)"))
return "DIRECT"; // If the protocol or URL matches, send direct.
if (url.substring(0, 4)=="ftp:" ||
shExpMatch(url, "http://abcdomain.com/folder/*"))
return "DIRECT"; // If the requested website is hosted within the internal network, send direct.
if (isPlainHostName(host) ||
shExpMatch(host, "*.local") ||
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"; // If the IP address of the local machine is within a defined
// subnet, send to a specific proxy.
if (isInNet(myIpAddress(), "10.10.5.0", "255.255.255.0"))
return "PROXY 1.2.3.4:8080"; // DEFAULT RULE: All other traffic, use below proxies, in fail-over order.
return "PROXY 4.5.6.7:8080; PROXY 7.8.9.10:8080"; }

建议

在部署URL和主机规则时,必须注意确保规则尽可能的明确,以下示例详细说明了应该如何实现主机和URL规则

主机示例:
if (dnsDomainIs(host, "abcdomain.com") || dnsDomainIs(host, "www.abcdomain.com"))
return "DIRECT";
网址示例:
if (shExpMatch(url, "http://abcdomain.com/folder/*"))
return "DIRECT";

警告:

一下代码是一个示例,由于对使用shExpMatch函数,通配符和主机名的广泛解释,可能会产生意想不到的后果

警示示例:
// Would send both of the following requests direct to the Internet:
// 1. www.hotmail.com 2. phishing-scam.com?email=someone@hotmail.com if (shExpMatch(url, "*hotmail.com*"))
return "DIRECT";
安全示例:
// Would send only traffic to the the host and subdomains of hotmail.com if (shExpMatch(host, "*.hotmail.com"))
return "DIRECT";

2.2 PAC功能

支持PAC的浏览器提供原始的NetScape规范规范中定义的函数列表的访问
        每个浏览器都在沙箱中实现PAC,只允许访问操作所需要的那些JavaScript函数,仅此而已。例如,无法访问PAC文件中的浏览器用户代理字符串,该文件是普通网页可用的字符串

PAC的函数

dnsDomain:评估主机名,如果主机名匹配则返回True。主要用于匹配和例外单个主机名

// If the hostname matches google.com or www.google.com
// send direct to the Internet. if (dnsDomainIs(host, "google.com") || dnsDomainIs(host, "www.google.com"))
return "DIRECT";

shExpMatch:将主机名和URL与指定的SHELL表达式匹配,如果匹配则返回true

// Any requests with a hostname ending with the extension .local
// will be sent direct to the Internet. if (shExpMatch(host, "*.local"))
return "DIRECT";
// A request for the host vpn.domain.com or any request for a file or folder in the
// location http://abcdomain.com/folder/ will be sent direct to the Internet. if (shExpMatch(host, "vpn.domain.com") ||
shExpMatch(url, "http://abcdomain.com/folder/*"))
return "DIRECT";

isInNet:此函数评估主机名的IP地址,如果在指定的子网内返回true。如果传递了主机名,则该函数会将主机名解析为IP地址

// If IP of requested website website falls within IP range, send direct to the Internet.

if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";

myIpAddress:返回主机的IP地址。

// If the machine requesting a website falls within IP range,
// send traffic via proxy 10.10.5.1 running on port 8080. if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0"))
return "PROXY 10.10.5.1:8080";

dnsResolve:将主机名解析为IP地址。此功能可用于减少DNS查找的数量,例如以下示例。

// If IP of the requested host falls within any of the ranges specified, send direct.

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";

isPlainHostName:如果主机名不包含任何点,则此函数将返回true,例如http://intranet

在为内部网站应用异常时很有用,例如,可能不需要将主机名解析为IP地址以确定是否为本地。

// If user requests plain hostnames, e.g. http://intranet/,
// http://webserver-name01/, send direct. if (isPlainHostName(host))
return "DIRECT";

localHostOrDomainIs:评估主机名,仅在找到确切的主机名匹配时才返回true。

// If the Host requested is "www" or "www.google.com", send direct.

if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";

isResolvable:尝试将主机名解析为IP地址,如果成功则返回true。警告 - 如果域无法解析,这可能会导致浏览器暂时挂起。

// If the host requested can be resolved by DNS, send via proxy1.example.com.

if (isResolvable(host))
return "PROXY proxy1.example.com:8080";

dnsDomainLevels:此函数返回主机名中DNS域级别(点数)的数量。可用于例外使用短DNS名称的内部网站,例如http://intranet

// If hostname contains any dots, send via proxy1.example.com, otherwise send direct.

if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else return "DIRECT";

weekdayRange:允许规则基于时间,例如仅在特定日期返回代理。

// If during the period of Monday to Friday, proxy1.example.com will be returned, otherwise
// users will go direct for any day outside this period. if (weekdayRange("MON", "FRI")) return "PROXY proxy1.example.com:8080";
else return "DIRECT";

dateRange:允许规则基于时间,例如仅在特定月份内返回代理。

// If during the period of January to March, proxy1.example.com will be returned, otherwise
// users will go direct for any month outside this period. if (dateRange("JAN", "MAR")) return "PROXY proxy1.example.com:8080";
else return "DIRECT";

timeRange:允许规则基于时间,例如仅在特定时间内返回代理。

// If during the period 8am to 6pm, proxy1.example.com will be returned, otherwise
// users will go direct for any time outside this period. if (timeRange(8, 18)) return "PROXY proxy1.example.com:8080";
else return "DIRECT";

alert:虽然先前在多个浏览器中支持过支持,但在原始PAC规范中未指定alert()函数,这对于以最终用户可查看并利用的方式输出变量值或函数结果非常有用。解决PAC文件规则问题。

现在,此函数在PAC文件中被视为不受支持且不起作用

// Outputs the resolved IP address of the host in the browser
// to end-user or error console. resolved_host = dnsResolve(host);
alert(resolved_host);

2.3 代码片段

大多数PAC文件包含许多常见的元素;下面是常见的PAC文件代码

本地网络配置

if (isPlainHostName(host) ||
shExpMatch(host, "*.local") ||
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), "173.37.0.0", "255.255.0.0") ||
isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
return "DIRECT";

主机匹配

if (dnsDomainIs(host, "abcdomain.com") || dnsDomainIs(host, "www.abcdomain.com"))
return "DIRECT";

网址匹配

if (shExpMatch(url, "http://abcdomain.com/folder/*"))
return "DIRECT";

协议控制

// HTTP
if (url.substring(0,5)=="http:") return "DIRECT";
// HTTPS
if (url.substring(0,6)=="https:") return "DIRECT";
// FTP
if (url.substring(0,4)=="ftp:") return "DIRECT";

定义连接方法

// Direct-to-Internet
return "DIRECT";
// Proxy
return "PROXY proxy.domain.local:8080";
// Failover
return "PROXY proxy1.domain.local:8080; PROXY proxy2.domain.local:8080; DIRECT";

基于机器IP的路由

if (isInNet(myIpAddress(), "10.10.5.0", "255.255.255.0"))
return "PROXY 1.2.3.4:8080";

2.4 误区

虽然广泛实施,但PAC规范并不是一个已批准的标准,而WPAD规范只能作为IETF草案,即1999年12月到期的草案。这种标准化的缺乏导致了一些不一致的PAC编码实践,这些实践并未反映出来。主要浏览器中PAC规范的实际实现。

尽管存在这种模糊性,但除了myIpAddress()函数之外,PAC规范的实现在浏览器和操作系统之间是一致的。

本页试图消除一些常见但不必要的PAC编码实践背后的原因。已提供代码示例作为不应执行的操作的示例。

为了执行主机匹配,必须将主机变量转换为小写。

错误。在所有主流浏览器(Internet Explorer,Firefox,Chrome和Safari)中都没有必要实现此类代码。

没有发现浏览器要求将主机转换为小写以防止区分大小写的匹配问题。与URL不同,主机不区分大小写,因此任何PAC规则机制在匹配主机时都应自动假设不区分大小写。

PAC规范的早期浏览器实现可能存在此功能的问题,但是,与Internet Explorer 6(2001年发布)和Firefox 2(2006年发布)一样旧的浏览器不会出现这些问题。

示例(不做的事):

host_var = host.toLowerCase();
if (dnsDomainIs(host_var, "example.com"))
return "DIRECT";

当使用多个DNS依赖PAC功能时,浏览器将使用每个功能为同一主机执行新的DNS查找。

错误。在利用DNS系统时,尚未发现所有主要浏览器(Internet Explorer,Firefox,Chrome和Safari)的PAC实施都表现出任何异常行为。

如果浏览器访问了最近访问的主机,则本地DNS缓存将向浏览器提供DNS结果。如果最近未访问主机且不在DNS缓存中,则将要求为主机配置的DNS服务器提供DNS结果。这将执行一次,结果在本地缓存。

示例(不做的事):

host_var = host.toLowerCase();
if (dnsDomainIs(host_var, "example.com"))
return "DIRECT";

当使用多个DNS依赖PAC功能时,浏览器将使用每个功能为同一主机执行新的DNS查找。

三 部署

3.1 部署选项

比较部署

web浏览器提供了几种指定代理的使用方法

显式代理:在浏览器使用文字代理绕过指定单个代理

RAC文件:在浏览器中指定RAC的位置(例如,在本地或者在web服务器上托管)。PAC文件可以提供代理故障转移支持,高级代理绕过支持等

WRAD:只需要在浏览器中选中复选框,浏览器就可以使用DHCP或者DNS来猜测RAC文件的位置

部署

优点

缺点

显式部署

易于部署,不需要额外的基础架构

不需要JavaScript知识

在所有的浏览器中都支持

没有故障转移功能

代理绕过列表时文字的,浏览器不会讲主机解析为IP,反之亦然。可能需要在旁路列表中指定IP和主机

PAC

代理故障转移支持

在所有的主流浏览器中都支持

能够无缝绕过特定主机或IP的代理

大多数部署都需要web服务器的基础架构

需要JavaScript知识

如果PAC文件不可用(例如,当离网时),某些浏览器可能会失败

WPAD

包括所有PAC优点

部署仅需要选中复选框

如果WPAD无法找到PAC文件(例如,当离网时)浏览器将失败

包括所有PAC的缺点

需要更改DNS或者DHCP基础结构

3.2 PAC部署

使用浏览器代理设置显式部署PAC文件是最直接的部署方法之一。完成PAC文件后,以下步骤将有助于在Web服务器上部署PAC文件。

网络服务器

应将web服务器配置使用正确的MIME类型提供的PAC文件

IIS Web服务器

1、通过终端服务或远程桌面连接登录服务器。
2、单击开始,选择程序,然后单击管理工具。
对于IIS 5.0:打开Internet服务管理器。
对于IIS 6.0:打开Internet信息服务。
3、在左栏中,您将看到服务器名称。
  在IIS 5.0中:展开“服务器名称”以查找域名。
  在IIS 6.0中:展开“服务器名称”,然后展开“网站”以查找域名。
4、右键单击域名,然后选择“ 属性”。
5、在“HTTP标头”选项卡上,单击“ MIME类型”。
6、单击新建。
7、输入以下信息:
  扩展名: .pac
  MIME类型: application / x-ns-proxy-autoconfig
8、单击确定。

Apache Web服务器

1、创建.htaccess文件。

2、将以下行添加到文件中:

AddType application / x-ns-proxy-autoconfig .pac

3、将文件上载到PAC文件所在的位置。

浏览器部署

根据管理环境,可以使用组策略等工具自动配置浏览器,也可以手动为每个浏览器的连接设置配置浏览器。

组策略

组策略设置将应用于Internet Explorer,Chrome和Safari。Firefox可能需要使用第三方工具来采用这些组策略设置。

1、打开组策略对象编辑器。
2、展开用户配置 > Windows设置 > Internet Explorer维护树。
3、打开连接并选择自动浏览器配置。
4、选中启用自动配置。
5、在“ 自动代理URL”文本框中输入PAC文件的URL,然后单击“ 确定”。

手动设置

3.3 部署WPAD

PAC文件

为了时DNS WPAD功能能够检测到PAC文件,请将PAC文件重命名为wpad.dat并长传到您的web服务器

网络服务器

web服务应该配置到服务于PAC文件,WPAD.DAT,用正确的MIME类型

IIS web服务器

1、通过终端服务或远程桌面连接登录服务器。
2、单击开始,选择程序,然后单击管理工具。
对于IIS 5.0:打开Internet服务管理器。
  对于IIS 6.0:打开Internet信息服务。
3、在左栏中,您将看到服务器名称。
  在IIS 5.0中:展开“服务器名称”以查找域名。
  在IIS 6.0中:展开“服务器名称”,然后展开“网站”以查找域名。
4、右键单击域名,然后选择“ 属性”。
5、在“HTTP标头”选项卡上,单击“ MIME类型”。
6、单击新建。
7、输入以下信息:
  扩展名: .dat
  MIME类型: application / x-ns-proxy-autoconfig
8、单击确定。

Apache Web服务器

1、创建.htaccess文件。
2、将以下行添加到文件中:
AddType application / x-ns-proxy-autoconfig .dat
3、将文件上载到与wpad.dat文件相同的位置。

DHCP服务器

DHCP服务器应配置为在发送给用户的DHCP信息中提供252条目。配置此条目时包含指向wpad.dat文件的直接链接。

Windows 2003 DHCP
1、单击开始,单击程序,单击管理工具,然后单击DHCP。
2、在控制台树中,右键单击DHCP服务器,单击“ 设置预定义选项”,然后单击“ 添加”。
3、在名称类型:WPAD
4、在代码类型:252
5、在“ 数据类型”中,选择“ String”,然后单击“ 确定”。
6、在“字符串”中,键入PAC文件的URL,格式为:http://webserver.example.com/wpad.dat
7、用鼠标右键单击服务器选项,然后单击配置选项。
8、确认已选择Option 252选项。
一旦创建,我们必须启用DHCP作用域的选项。
1、单击开始,单击程序,单击管理工具,然后单击DHCP。
2、右键单击“ 范围选项”,然后单击“ 配置选项”。
3、单击“ 高级”,然后在“ 供应商类”中单击“ 标准选项”。
4、在“ 可用选项”中,选择“ 252代理自动发现”选项,然后单击“确定”。

LINUX DHCP

1、编辑DHCP配置文件(通常为/etc/dhcp/dhcpd.conf)。
2、编辑以下内容并将其粘贴到文件中:
option local-pac-server code 252 = text;
option local-pac-server“http://wpad.example.com:80/wpad.dat”;
第一个声明必须在配置文件的全局部分中。
3、重启DHCP服务器。

DNS服务器

应将DNS服务器配置为主机wpqd提供A记录

Windowa 2003 DNS

1、单击开始,单击程序,单击管理工具,然后单击DNS。
2、在控制台树中,右键单击适用的正向查找区域,然后单击“ 新建主机(A)”。
3、在名称类型:wpad
4、在“ IP地址”中,输入托管wpad.dat文件的Web服务器的IP地址。

浏览器部署

组策略

组策略设置将应用于Internet Explorer,Chrome和Safari。Firefox可能需要使用第三方工具来采用这些组策略设置。

1、打开组策略对象编辑器。
2、展开用户配置 > Windows设置 > Internet Explorer维护树。
3、打开连接并选择自动浏览器配置。
4、选中自动检测配置设置

手动浏览器配置

3.4 浏览器支持

PAC文件和WPAD协议背后的技术从未成为批准的标准,因此,每个浏览器和操作系统的功能实现可能会有所不同。下表提供了对每个PAC / WPAD功能,交叉引用浏览器和操作系统的支持的指导。

Windows 10

Mac OS X(El Capitan / 10.11.1)

功能描述

DNS WPAD:支持使用DNS

DHCP WPAD发现PAC文件:支持使用DHCP发现PAC文件

mylpAddress():返回127.0.0.1以外的IP地址

IPv6:使用内置函数处理IPv6地址的能力,例如使用FindProxyForURLEx()

四 常见的问题

4.1PAC问题

尽管配置了PAC URL,但我的Web浏览器似乎没有使用PAC文件,这有什么可能的原因?
确保Web服务器具有为.pac文件扩展名配置的MIME类型application / x-ns-proxy-autoconfig。有关更多信息,请参阅PAC部署页面。
在浏览器代理设置中禁用PAC文件位置,并在浏览器URL栏中输入PAC文件的位置,它应该是可访问的。如果没有,请调查服务该文件的Web服务器。
确认JavaScript PAC文件代码没有语法错误/失败。
更新我的PAC文件后,我所做的更改似乎没有生效?
浏览器将缓存PAC文件,而不是为每个请求检索它; 在某些情况下,浏览器重启不足以获取文件的更新版本。为了获得最新版本,可能需要清除浏览器缓存,关闭所有浏览器窗口,然后重新打开浏览器应用程序。 使用PAC文件时,为什么Web浏览性能会降低?
PAC文件可以利用依赖于本地DNS服务器的若干功能来解析所请求的主机。这些函数是isInNet(),isResolvable()和dnsResolve()。 如果DNS服务器响应缓慢,则为新(非缓存)主机初始化这些功能将导致延迟,直到DNS服务器提供结果。这仅在首次请求主机时发生,或者主机DNS信息的本地缓存周期已过期。 可以通过利用诸如DIG的DNS应用程序来隔离这样的问题,该应用程序可以报告DNS服务器响应多长时间。虽然每个环境都是独一无二的,但最终用户可能会注意到超过500毫秒的响应时间。许多网站现在使用内容传送网络,这些网络可能提供来自几个不同主机的内容,因此对于较大的网站来说延迟可能很大 每个主机都是串行请求而不是并行请求(每个DNS请求必须在下一个开始之前完成)。 为什么浏览器在配置PAC文件和网络外时最初会停止/挂起?
使用PAC文件的IP地址位置时,浏览器将尝试连接到此IP地址,并等待连接尝试超时。超时可能不会持续几秒或更长时间,并可能导致某些浏览器挂起,直到发生这种情况。首次加载浏览器并访问网站时,将发生此延迟。 鉴于此超时行为,如果要将用户计算机从网络中取出,则建议使用DNS主机名配置浏览器以访问PAC文件。 使用PAC文件的DNS主机名时,浏览器将尝试针对外部DNS服务器解析内部DNS主机名。这将导致服务器通知Web浏览器不存在此类DNS记录。这个过程需要十分之一秒,最终用户不会注意到。无法访问PAC文件的浏览器将无法打开(直接连接到Internet)。 我有多个网络适配器,myIpAddress()函数返回一个不需要的IP地址。我可以重新排序优先级吗?
为myIpAddress()函数分配值时,浏览器将使用操作提供的第一个活动的网络适配器。Windows操作系统支持重新安排网络适配器顺序。 单击“ 开始”,单击“运行”,键入ncpa.cpl,然后单击“ 确定”。
可以在“网络连接”窗口的“LAN和高速Internet”部分中找到可用的连接。
使用“ 高级”菜单,单击“ 高级设置”,然后单击“ 适配器和绑定”选项卡。
在“ 连接”区域中,选择要重新排序的连接。使用箭头按钮更改顺序。
有关配置网络适配器顺序的更多说明和信息,请参阅Microsoft支持中心。 我正在尝试使用PAC文件在代理之间平衡流量,但应用程序和网站无法加载或生成错误消息。我怎样才能解决这个问题?
有几个代码示例可用于在使用PAC文件时尝试可行的负载平衡解决方案,遗憾的是,这些示例中没有一个能够实现真正的负载平衡,并且在使用需要持久连接的应用程序或网站时常常导致连接管理问题和/或期望交通穿越同一条路线。这些解决方案通常依赖于使用各种JavaScript攻击的流量路由中的随机化,因此这些解决方案甚至不提供真正的基于负载的流量分布。 使用位于代理本身前面的硬件解决方案可以最好地实现代理之间的负载平衡,该解决方案可以跟踪每个代理的负载,并根据当前卷分配此流量。

4.2 WPAD问题

尽管DNS配置正确,但我无法解析WPAD主机?
Windows 2008以及Windows 2003 DNS的后续更新为常见的滥用查询实现了DNS阻止列表(globalqueryblocklist),这可能会阻止WPAD主机的解析。 为了允许Windows 2008 DNS解析主机WPAD,请参阅有关此问题的Microsoft文章。 命令行选项不适用于Windows 2003,因此需要对Windows注册表进行更改。 在每个DNS服务器上打开Windows注册表(例如,开始>运行> Regedit)。
在下表中找到注册表项位置。
在GlobalQueryBlockList键上单击鼠标右键> 修改。
删除wpad条目,然后单击“ 确定”。
您需要重新启动Windows DNS服务器服务才能使此更改生效。

使用DHCP WPAD时Firefox没有找到我的PAC文件,为什么会这样?
Firefox仅支持DNS WPAD,不支持DHCP WPAD。有关更多信息,请参阅WPAD简介和浏览器支持页面。

4.3 故障排查

明确的PAC
手动查看PAC文件代码。由于缺少逗号,括号,花括号或分号,通常会出现语法问题。
确保PAC文件代码使用pacparser或Proxy Validator等工具进行验证。
检查PAC文件规则是否存在任何意外的路由行为; 常见问题包括缺少代理返回语句和基于通配符的规则,这些规则会影响比预期更大的流量。可能导致直接传递到互联网的所有流量这样的错误,使得它只能显示该文件无法运行。
确认使用以下任一内容类型提供PAC文件扩展名(.pac或.dat):
application / x-ns-proxy-autoconfig
application / x-javascript-config
通过在本地文件系统上托管文件来测试PAC文件; 如果文件有效,则会将问题隔离到PAC文件Web服务器(例如连接或配置)。本地PAC文件测试的URL格式为file:// c:\ folder \ proxy.pac
WPAD DHCP
按照明确的PAC文件配置进行故障排除的步骤 - WPAD是部署PAC文件的一种方法,因此如果仅关注WPAD部分,可能会忽略Web服务器或文件本身的任何问题。
测试由DHCP推出的PAC文件URL,通过使用配置为显式PAC文件的浏览器代理设置中的PAC文件URL来执行此操作。这将验证PAC文件或PAC文件服务器本身是否是问题。
查看Windows注册表以确认WPAD DHCP推出的URL。
单击开始,然后选择运行。
键入regedit,然后单击“ 确定”。
将注册表树导航到以下位置:HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Connections \
在右侧窗格中,双击DefaultConnectionSettings。
WPAD DHCP URL将显示在对话框中 - 示例。
WPAD DNS
按照明确的PAC文件配置进行故障排除的步骤 - WPAD是部署PAC文件的一种方法,因此如果仅关注WPAD部分,可能会忽略Web服务器或文件本身的任何问题。
尝试ping主机wpad,无法解析将表明DNS服务器出现问题。主机名是否指向正确的Web服务器?WPAD DNS要求此记录存在并指向托管PAC文件的Web服务器。
禁用所有代理/ PAC设置后,尝试访问http://wpad/wpat.dat - WPAD DNS要求这是功能性URL格式。调查返回的任何错误。

4.4 官方工具集

概观

FindProxyForURL.com工具集旨在为疑难解答时的PAC / WPAD部署带来透明度和清晰度

该工具如何用于故障排除的一些示例包括是否正在使用正确的MIME类型推送PAC文件,PAC文件是否具有有效语法,WPAD DHCP正在推送哪个URL,或者WPAD DNS是否可以找到PAC文件。

发现的任何PAC文件都会自动下载和测试,同时收集和报告任何通常难以辨别的WPAD DNS / DHCP值。

使用管理员权限,Windows Vista或更高版本以及Windows Server 2003及更高版本支持Toolset。

下载:

https://drive.google.com/file/d/0BwTarLoLkOv7dzdDWVowOUg0RWM/view

部署

将ZIP内容解压缩到一个文件夹

运行Deploy_Toolset.bat,工具集将执行其操作,并在完成打开数据文件后执行

参考文献:

http://findproxyforurl.com/

PAC 代理自动发现简介的更多相关文章

  1. prometheus(5)之consul服务自动发现及pushgetway

    pushgetway(push上传metric数据) Pushgateway简介 Pushgateway是prometheus的一个组件,prometheus server默认是通过exporter主 ...

  2. 代理自动配置文件PAC的使用方法

    我通常上网使用两个浏览器,safari用于一般上网:Chrome安装SwitchyOmega插件,在不同的代理中切换,来保证某些网站的上网速度. 但是这种方式到了手机上就有点懵,几乎所有的iPhone ...

  3. 企业IT管理员IE11升级指南【15】—— 代理自动配置脚本

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  4. 巧用Salt,实现CMDB配置自动发现

    随着互联网+新形势的发展,越来越多的企业步入双态(稳敏双态)IT时代,信息化环境越来越复杂,既有IOE三层架构,也有VCE.Openstack等云虚拟化架构和互联网化的分布式大数据架构.所以,企业急需 ...

  5. PAC代理语法含义与书写规范

    一直以来使用ShadowSocksFQ,基本上默认的PAC代理模式己能满足所需,实在个别pac不方便的就转成用全局代理模式也能愉快FQ. 只是最近学习前端的知识,需要FQ访问 MDN web docs ...

  6. zabbix自动发现监控url

    1.在监控客户机上 web_site_code_status.sh: #!/bin/bash UrlFile="/opt/scripts/WEB.txt" IFS=$'\n' we ...

  7. Docker集群实验环境布署--swarm【3 注册服务监控与自动发现组件--consul】

    参考官网集群配置方式 https://hub.docker.com/r/progrium/consul/   集群中需要manager与node能通信consul的发现服务,不然,管理节点选举不了,无 ...

  8. Zabbix实战-简易教程--动作(Actions)--自动发现

    一.概述 Zabbix提供了有效和非常灵活的网络自动发现功能. 设置网络发现后你可以: 加快Zabbix部署(自动添加主机.添加模板) 简化管理(自动删除主机.删除模板.禁用主机) 无需过多管理就能在 ...

  9. zabbix 网络模板自动发现端口时,过滤掉某些特定规则的端口,减少item的方法

    1.需求描述        默认情况下Zabbix 模板 中网络接口自动发现接口时,会产生很多item,有时候会有我们不需要的一些接口,这时候需要过滤掉他们.        比如我有一台运行kvm的服 ...

随机推荐

  1. RDS MySQL 8.0 语句级并发控制

    RDS MySQL 8.0 语句级并发控制 背景 为了应对突发的数据库请求流量,资源消耗过载的语句访问,SQL 访问模型的变化, 并保持 MySQL 实例持续稳定运行,AliSQL 版本设计了基于语句 ...

  2. js+canvas黑白棋

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 《C语言深度解剖》学习笔记之内存管理

    第5章 内存管理 1.野指针 定义指针变量的同时最好初始化为NULL,用完指针后也将变量的值设置为NULL.也就是说除了使用时,别的时间都把它设置为NULL 2.堆,栈和静态区 堆:由malloc系列 ...

  4. @codechef - BUYLAND@ Buying Land

    目录 @desription@ @solution@ @accepted code@ @details@ @desription@ 给定一个 R * C 表示高度的矩阵 A,另一个 H * W 的矩阵 ...

  5. APICloud原生APP中ajax需要用api.ajax

    报错截屏: APICloud原生APP中ajax请求需要用api.ajax(api对象的ajax方法来替代),否则会将引起请求失败. APICloud api.ajax

  6. day3_python之函数返回值、语句形式、表达式形式

    一. 函数对象 1. 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二.返回值 return的返回值没有类型 ...

  7. 云原生生态周报 Vol. 6 | KubeCon EU 特刊

    5 月 26日,2019 年第一个 KubeCon + CloudNativeCon 在巴塞罗那成功闭幕.本届 KubeCon 共吸引了超过 7700 名与会者,相较去年哥本哈根大会的 4300 余名 ...

  8. oracle 用EXISTS替换DISTINCT

    当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT. 一般可以考虑用EXIST替换 例如: 低效: SELECT DISTINCT DEPT_NO, ...

  9. HDU 2844 混合背包、

    题意:一个人想买手表,给你n个价值的硬币,然后给你n个价值硬币对应的个数.但是呢,这个人只知道这个手表的价格不超过m元.问他最多能买多少种价值的手表 思路:dp背包专题 但是- - 一直不知道该怎么d ...

  10. java表达式和三目运算符

    是由数字.运算符.数字分组符号(括号)等以能求得数值的有意义排列的序列; a + b 3.14 + a (x + y) * z + 100 boolean b= i < 10 && ...