总结 ...我们的域策略会按照预定义的时间间隔默默地将 LAN 设置(包括代理引用)强制推送到我的计算机,而这恰好发生在我开发期间,但已手动禁用代理之后。由于我确实知道我已为本地地址禁用了代理,因此我并没有想到这会成为问题的根源。
在我的其中一台运行 Windows Server 2012 R2 的开发机器上,我遇到了通过 hosts 文件进行主机本地解析的奇怪行为。
[重现描述]
安慰
C:\Windows\system32>ping baz.inga
Ping request could not find host baz.inga. Please check the name and try again.
C:\Windows\system32>_
Hosts 文件
127.0.0.1 baz.inga
::1 baz.inga
返回控制台
C:\Windows\system32>ping baz.inga
Pinging baz.inga [127.0.0.1] with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
C:\Windows\system32>_
...然后,我在 localhost:7890 上托管一个应用程序
Fiddler
[预期]:本地主机解析将“baz.inga”解析为“localhost”并提供我的内容
[实际]:503“服务不可用”响应和 DNS 查找失败
有没有合理的解释可以解释为什么本地无法解决?我在运行 Windows 7 的计算机上测试了完全相同的过程,对 HTTP 代理的响应是本地解析的资源。
什么鬼?!?!
答案1
HTTP 503 是来自应用程序的错误响应,而不是 DNS 查找失败;如果请求由于无法解析其主机名而实际上无法到达您的应用程序,则它不会收到 503 响应。
看起来您的名称解析没有问题(如预期的那样,并且已通过ping
工作确认);但您的申请却有问题。
答案2
我们的组策略规定域的 LAN 设置会根据计时器自动推送到我们所有连接的机器。
尽管我在配置本地主机解析时禁用了代理脚本,但当计时器到达时,代理脚本引用会默默地强制通过 LAN 推送,并导致错误。由于我已经手动禁用了 http 代理,所以我没有想到这会是我问题的根源,而且“一定”是更复杂的原因。
为了代替创建一个新的“特权”域策略,该策略不会自动推送这些严格的设置,我们的解决方案是定义一个约定,其中用于在本地计算机上解析的主机将被赋予一个基于约定的“保留”结束授权段,然后通过修改从 DC 推送的 proxy.pac 文件,将其作为 DIRECT 引用自动通过代理进行解析
if(dnsDomainIs(host, ".reserved")) { return "DIRECT"; }