场景: 我在一家公共图书馆工作,我们使用付费数据库来访问资助信息。我们 SLA 的一部分是用户必须从一个指定的 IP 地址访问该站点。用户必须身处我们的其中一个地点,并且密码不能存储在 PC 上。他们提供了三个与正常网址略有不同的地址。提供给我们的地址以“ipl”结尾。一旦我们的一位用户尝试访问它,他们的系统将验证传入的 IP 地址,如果它与我们提供的相匹配,它将授予用户访问权限。
为了实现这一点,我们决定实施一个本地代理服务器。每台 PC 都将配置为通过 .pac 文件访问代理服务器。如果用户尝试访问这三个站点中的任何一个,该文件只会将流量发送到代理服务器。所有其他流量将通过我们的常规路由器出去。
问题: 一些网站没有按预期工作。一些网站按预期代理,而另一些则没有。根据我的研究,使用 dnsDomainIs 和 shExpMatch 似乎可能存在某种类型的语法错误。例如www.cnn.com,www.tesla.com,www.yahoo.com,工作得很好。在同一个脚本中,如果我用提供的 URL 替换它们,它们将无法按预期工作。
如果我在代理服务器上的浏览器中使用这些地址,它会按预期工作。
示例脚本:
function FindProxyForURL(url, host) {
// Your proxy server name and port
var proxyserver = ‘0.0.0.0:8080';
//
// Here's a list of hosts to connect via the PROXY server
//
var proxylist = new Array(
"www.tesla.com",
"www.monster.com",
"www.cnn.com",
"www.yahoo.com",
"https://fconline.foundationcenter.org/ipl.php",
"https://grantstoindividuals.org",
"https://www.guidestar.org/ipl"
);
// Return our proxy name for matched domains/hosts
for(var i=0; i<proxylist.length; i++) {
var value = proxylist[i];
if ( localHostOrDomainIs(host, value) ) {
return "PROXY "+proxyserver;
}
}
return "DIRECT";
}
如能提供任何帮助让此脚本正常工作,我们将不胜感激。
谢谢
您必须匹配主机名,而不是 URL。首先从要代理的 URL 中删除
https://
和 URL 路径 (/file.ext
)。 0.0.0.0:8080
周围还有一个“智能引号”,您需要在 JavaScript 中使用纯 ASCII 单引号 ('
)。
function FindProxyForURL(url, host) {
// Your proxy server name and port
var proxyserver = '0.0.0.0:8080';
//
// Here's a list of hosts to connect via the PROXY server
//
var proxylist = new Array(
"www.tesla.com",
"www.monster.com",
"www.cnn.com",
"www.yahoo.com",
"fconline.foundationcenter.org",
"grantstoindividuals.org",
"www.guidestar.org"
);
// Return our proxy name for matched domains/hosts
for(var i=0; i<proxylist.length; i++) {
var value = proxylist[i];
if ( localHostOrDomainIs(host, value) ) {
return "PROXY "+proxyserver;
}
}
return "DIRECT";
}
这个 PAC 文件可以简化很多。像这样的东西:
function FindProxyForURL(url, host) {
// Your proxy server name and port
var proxyserver = '0.0.0.0:8080'
//
// Here's a list of hosts to connect via the PROXY server
//
var proxylist = new Set([
"www.tesla.com",
"www.monster.com",
"www.cnn.com",
"www.yahoo.com",
"fconline.foundationcenter.org",
"grantstoindividuals.org",
"www.guidestar.org"
])
if(proxylist.has(host)) return `PROXY ${proxyserver}`
return "DIRECT";
}