对我的服务器的许多 HTTP 请求都失败了524 (Origin time-out)
。无法交付的资源并不总是相同的。有时它们可以正常工作,但下一次请求时却不行。
我将 Cloudflare 列入白名单IP地址。不幸的是,这没有多大帮助,因为实际访问我服务器的源 IP 来自法国 Cloudflare 服务器,其 IP(172.68.51.*)不在官方 Cloudflare IP 列表中。所以我临时添加了一条允许所有内容(所有 IP、所有端口、所有协议等)的防火墙规则。而且我没有任何Block
规则(可能会覆盖允许所有内容的规则)。
更奇怪的是,Windows 防火墙没有记录任何超时资源的阻止请求。此外,IIS 也没有记录这些资源的任何请求,因此问题肯定发生在 IIS 介入之前的某个时间。
如果我完全禁用 Windows 防火墙,一切都会按预期运行(所有资源均成功交付/没有超时)。如果我再次通过另一个域(未映射到 Cloudflare 的域)发出请求,一切都会正常运行。
问题可能是什么原因造成的?
为了测试,我使用了 Cloudflare 的开发模式(无缓存但仍代理),因为显然 Cloudflare 已经缓存的资源没有问题。
更新:即使绕过所有规则(将“入站连接”从“阻止(默认)”更改为“允许”)也不起作用,所以这不是规则问题。问题肯定存在于禁用防火墙(有效)和启用防火墙但允许所有入站和出站连接(无效)之间。
防火墙开启时,Wireshark 显示 TCP 重传错误。禁用防火墙后,不会再出现此类错误:
答案1
问题确实出在 Windows 防火墙上,尽管我把所有东西都列入了白名单,也没有记录任何被阻止的数据包。防火墙有一种奇怪的隐身模式,当它丢弃数据包时不会记录任何内容。
我已禁用它适用于我的活动防火墙配置文件,即使删除了我的允许所有规则,超时也不会消失(尽管我将 Cloudflare IP 列入白名单)。
还需要重新启动服务器以便 Windows 防火墙能够接收注册表更改。
更新:我编写了这个批处理脚本来禁用隐身模式:
REG ADD HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\WindowsFirewall\DomainProfile /v DisableStealthMode /t REG_DWORD /d 1
REG ADD HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\WindowsFirewall\PrivateProfile /v DisableStealthMode /t REG_DWORD /d 1
REG ADD HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\WindowsFirewall\PublicProfile /v DisableStealthMode /t REG_DWORD /d 1
REG ADD HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\WindowsFirewall\StandardProfile /v DisableStealthMode /t REG_DWORD /d 1
PAUSE