aaie_ / Windows / FindProxyForURL浏览器自动脚本配置

0 0

   

FindProxyForURL浏览器自动脚本配置

2012-01-13  aaie_
很多时候你在Internet接入时只使用代理方式而非NAT,那么给使用代理的客户终端设置代理服务器将是一件很烦琐的事情,特别是当代理服务器进行各种改动(比如服务器IP地址,服务端口等等变了)后,你不得不对通知所有的客户重新进行设置。Proxy Auto-Config(PAC)脚本将帮助你解决这些问题。也许你已经注意到Internet Explorer的代理设置里面有一个“使用自动配置脚本”的选项,这里的自动配置脚本指的就是PAC脚本。这是一种以.pac为扩展名的JavaScript脚本,我们可以把它放在内部网络的某个web服务器上,设置客户端IE浏览器把“自动配置脚本选项”指向它(比如http://192.168.100.1/proxy.pac),完成集中设置代理配置的工作。PAC脚本还可以根据用户访问请求的不同设置不同的代理策略,比如,用户访问内部网的某台服务器时,PAC脚本可以告诉浏览器该访问将不通过代理服务器,而用户访问的是内部网以外的地址时,PAC脚本告诉浏览器这个访问请求使用代理。PAC脚本另外一个重要的应用是多台代理服务器并存的情况下,通过pac脚本的控制:用户随机选择使用多台代理服务器中的任意一台来达到流量负载均衡的目的;
     管理员通过PAC脚本控制用户使用和不使用某台代理服务器,这样可以空出时间对代理服务器进行维护;让服务器工作在主备模式,当主服务器宕机时,会自动切换到其它备用服务器而不会中断服务;根据访问目的地的不同,自动选择最佳代理服务器。PAC脚本中必须定义一个名为FindProxyForURL的函数,这个函数会被浏览器自动调用。其格式如下:function FindProxyForURL(url, host){    ……
 
关于代理设置的“自动配置脚本”不起作用的问题,已有研究结果。

该问题已解决了,解铃还须系铃人。借助firefox调试功能(菜单路径:工具-错误控制台,每次启动firefox后打开这个菜单可以看到调试信息),通过对比工具发现出现故障的脚本文件头多了2个字符,十六进制为”ff fe“。进一步分析发现是使用Ultraeditor编辑时,保存为utf-8格式导致。解决方法如下:

新建一个文件,将原先脚本内容拷贝、粘贴到新文件,保存时注意格式选择为缺省格式。(注意不要使用另存的方式)
用记事本、或者emEditor编辑,也可以避免这个问题。保险起见,保存文件时选择保存类型为“所有文件”。

其他注意事项:
在FireFox中自动配置代理的地址格式类似为:file:///d:/setup/proxy.pac
而在IE中,自动配置脚本的地址格式应该是类似为:file://d:\setup\proxy.pac
第一个单词function需要首字母小写,如果首字母大写则无法识别。
 
 
 
第一种配置
 
function FindProxyForURL(url,host){
host= host.toLowerCase();
if (
  dnsDomainIs(host,'youtube.com')
  ||dnsDomainIs(host,'ytimg.com')
  ||dnsDomainIs(host,'twitter.com')
  ||dnsDomainIs(host,'facebook.com')
  ||dnsDomainIs(host,'fbcddn.net')
  )return "PROXY 127.0.0.1:8118";
  else
    return "DIRECT";
}
 
第二种配置
function FindProxyForURL(url, host) {
       // Make the URL Lowercase for easier parsing
       var urllower = url.toLowerCase();
       url = urllower;
              
       // Make host lowercase
       var lhost = host.toLowerCase();
       host = lhost;
       
        //Handle localhost
        if (
                (host == "localhost") ||
                (shExpMatch(host, "localhost.*")) ||
                (host == "127.0.0.1")
                )
        {
       return "DIRECT";
        }
       
        // If any of the below protocols, go direct
        if(
                (urllower.substring(0,5)=="rtsp:") ||
                (urllower.substring(0,6)=="rtspt:") ||
                (urllower.substring(0,6)=="rtspu:") ||
                (urllower.substring(0,4)=="mms:") ||
                (urllower.substring(0,5)=="mmst:") ||
                (urllower.substring(0,5)=="mmsu:")
                )
        {
                return "DIRECT";
        }
 
       
        // Go via proxy for my-diploma
        if ( dnsDomainIs(host, ".my-diploma.co.uk") )
        {
                return "PROXY wct-fw1.wortech.ac.uk:8080; wct-fw2.wortech.ac.uk:8080";
        }
       
        // Go direct for all wortech.ac.uk, and misc other specific hosts
        if (
                dnsDomainIs(host, ".wortech.ac.uk") ||
                dnsDomainIs(host, ".gateway.lsc.gov.uk")
                )
        {
                return "DIRECT";
        }
       
        // Go direct for local subnets
        if (shExpMatch(host, "/^\d+\.\d+\.\d+\.\d+$/g"))
        {
                if (
                        isInNet(host, "10.0.0.0", "255.0.0.0") ||
                        isInNet(host, "192.168.0.0", "255.255.0.0") ||
                        isInNet(host, "172.16.0.0", "255.255.0.0") ||
                        isInNet(host, "172.17.0.0", "255.255.0.0")
                        )
                        {
                                return "DIRECT";
                        }
        }
        if (urllower.substring(0,6)=="https:")
        {
                return "PROXY wct-fw1.wortech.ac.uk:8443; wct-fw2.wortech.ac.uk:8443";
        }
        return "PROXY wct-fw1.wortech.ac.uk:8080; wct-fw2.wortech.ac.uk:8080";
}
 
第三种配置
 
function FindProxyForURL(url, host) {
 // Make the URL Lowercase for easier parsing
 var urllower = url.toLowerCase();
 url = urllower;
  
 // Make host lowercase
 var lhost = host.toLowerCase();
 host = lhost;
 
 //Handle localhost
 if (
  (host == "localhost") ||
  (shExpMatch(host, "localhost.*")) ||
  (host == "127.0.0.1")
  )
 {
       return "DIRECT";
 }
 
 // If any of the below protocols, go direct
 if(
  (urllower.substring(0,5)=="rtsp:") ||
  (urllower.substring(0,6)=="rtspt:") ||
  (urllower.substring(0,6)=="rtspu:") ||
  (urllower.substring(0,4)=="mms:") ||
  (urllower.substring(0,5)=="mmst:") ||
  (urllower.substring(0,5)=="mmsu:")
  )
 {
  return "DIRECT";
 }
 
 // Go via proxy for my-diploma
 if ( dnsDomainIs(host, ".my-diploma.co.uk") )
 {
  return "PROXY wct-fw1.wortech.ac.uk:8080; wct-fw2.wortech.ac.uk:8080";
 }
 
 // Go direct for all wortech.ac.uk, and misc other specific hosts
 if (
  dnsDomainIs(host, ".wortech.ac.uk") ||
  dnsDomainIs(host, ".gateway.lsc.gov.uk")
  )
 {
  return "DIRECT";
 }
 
 // Go direct for local subnets
 if (shExpMatch(host, "/^\d+\.\d+\.\d+\.\d+$/g"))
 {
  if (
   isInNet(host, "10.0.0.0", "255.0.0.0") ||
   isInNet(host, "192.168.0.0", "255.255.0.0") ||
   isInNet(host, "172.16.0.0", "255.255.0.0") ||
   isInNet(host, "172.17.0.0", "255.255.0.0")
   )
   {
    return "DIRECT";
   }
 }
 if (urllower.substring(0,6)=="https:")
 {
  return "PROXY wct-fw1.wortech.ac.uk:8443; wct-fw2.wortech.ac.uk:8443";
 }
 return "PROXY wct-fw1.wortech.ac.uk:8080; wct-fw2.wortech.ac.uk:8080";
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    来自: aaie_ > 《Windows》

    猜你喜欢

    0条评论

    发表

    请遵守用户 评论公约

    类似文章
    喜欢该文的人也喜欢 更多