我正在运行一个Squid代理,并希望排除通过非标准端口访问的某个web地址,而不是在squid.conf内的ACL中打开端口(似乎是它的一个特定用法)。
在我的例子中,在http://和https://.上存在问题的TCP 2222 (DirectAdmin)端口我不确定在不打开端口本身的情况下是否真的可以这样做,但我确实找到了几篇关于用PAC/WPAD绕过带有非标准端口的URL的文章。我尝试过如下所示的规则集,它为TLD设置了通配符,为非标准端口URL设置了特定规则。
if (shExpMatch(host, "*.somedomain.com") ||
shExpMatch(url, "http://example.somedomain.com:2222/*") ||
shExpMatch(url, "https://example.somedomain.com:2222/*"))
return "DIRECT";使用pactester,我从规则测试中得到了直接的正确响应。
pactester -p /path/to/wpad.dat -u http://example.somedomain.com
DIRECT
pactester -p /path/to/wpad.dat -u http://example.somedomain.com:2222
DIRECT
pactester -p /path/to/wpad.dat -u https://example.somedomain.com:2222
DIRECT然而,当我在浏览器中得到“代理拒绝连接”等信息时,请求似乎仍在通过代理发送。端口本身不被阻塞,我可以告诉它,但是Sqiud不允许端口。虽然这是我试图避免做的,而直接反应无疑意味着绕开?
这实际上是否有可能实现与PAC/WPAD与非标准端口,或他们的另一种方式绕过和直接发送这一具体情况?
发布于 2015-07-24 13:09:21
原始配置
if (shExpMatch(host, "*.somedomain.co.uk") ||
shExpMatch(url, "http://example.somedomain.com:2222/*") ||
shExpMatch(url, "https://example.somedomain.com:2222/*"))
return "DIRECT";你确定这不应该
if (shExpMatch(host, "*.somedomain.co.uk") ||
shExpMatch(url, "http://example.somedomain.co.uk:2222/*") ||
shExpMatch(url, "https://example.somedomain.co.uk:2222/*"))
return "DIRECT";您可能正在尝试访问example.somedomain.co.uk,但是您的条件是为example.somedomain.com编写的,所以它一直在访问代理?
发布于 2017-01-30 12:11:06
如果您想要更通用的东西,允许所有需要非标准端口的请求直接执行,请尝试:
if (shExpMatch(url, "*://" + host + ":*"))
return "DIRECT";这并不完美(您可能需要修改,以便显式地为协议指定标准端口的请求,例如:80用于HTTP,和:443用于HTTPS仍然通过代理),但它应该能够捕获大多数请求。欢迎精益求精。
发布于 2015-07-24 13:34:20
看起来它是缓存和糟糕的isInNet规则的组合,它覆盖了特定端口if语句中的直接规则。
当以正确的顺序执行时,发布的规则示例确实有效!
https://serverfault.com/questions/708165
复制相似问题