kaishusotry.com遇到客户端应用程序和神秘的403s问题。 但是在日志中找不到相关的Ray ID 531c7825e9c9e4c8。 现象是浏览器可以正常访问,但无法在APP中访问。 在以下日志中,我们可以清楚地看到Content-Type \“:\”文本\\ / html的记录,并且该日志中记录的响应服务器是Cloudflare。 但是,此请求不应发送到Cloudflare。 特别是,cdn.kaishuhezi.com是一个https请求。 Cloudflare将在TLS握手阶段主动断开连接,并且不会有HTTP响应,因此从理论上讲,它不应具有此RayID。
步骤1:检查原始服务器日志
我们可以通过带有不记录的Ray ID的403来识别它,百度提供了源服务器日志以进行故障排除,如下所示:
Kaishustory是儿童内容提供商。该品牌也称为Kaishu Story,该品牌通过其他产品(例如音频系列和在线育儿课程)专注于儿童故事。但是从上面的日志来看,日志中不存在“ audio / mpeg”,“ video / mp4”,“ image / png”,“ image / x-icon”,“ image / jpeg”响应头。EdgeReponseStatus代码499表示当HTTP服务器正在处理其请求时,当客户端关闭连接时,服务器将无法将HTTP标头发送回,因此,如果可能,我们需要做更多的工作以进行进一步的研究。
步骤2:查看来自Kibana的记录
我们发现有指示的522错误。 对于HTTP 522错误,请参考以下知识库
Error 522: connection timed out
Cloudflare 联系源站 Web 服务器时超时会发生 522 错误。有两种不同的错误导致 HTTP 错误 522,具体取决于 Cloudflare 和源站 Web 服务器之间发生超时的时间:
在连接建立之前,源站 Web 服务器未在 Cloudflare 发送 SYN 后 15 秒内将 SYN + ACK 返回给 Cloudflare。
在连接建立之后,源站 Web 服务器未在 90 秒内确认(ACK)Cloudflare 的资源请求。
联系您的主机提供商,从源站 Web 服务器上排查下列常见原因:
(最常见).htaccess、iptables 或防火墙中阻止了 Cloudflare IP 地址或对其设置了速率限制。确认您的主机提供商已将 Cloudflare IP 地址列入白名单。
源站 Web 服务器过载或离线,因而丢弃了传入的请求。
源站 Web 服务器上禁用了 Keepalives 功能。
Cloudflare DNS 应用中的源站 IP 地址与主机提供商当前为您的源站 Web 服务器置备的 IP 地址不匹配。
您的源站 Web 服务器上丢弃了数据包
步骤3:搜索完整的Nginx日志
因为我们需要找到特定的Ray ID才能精确识别问题。要调查Cloudflare为什么在第一步和第二步超时与原始Web服务器联系。我们需要与系统日志不同的检查请求日志。
Syslog显示完整性检查失败。 然后,我们需要与客户确认为什么HTTP流量没有SNI。 问题出在应用而不是Cloudflare。 因此,我们可以确定需要传统的非SNI支持证书的客户。 问题出在HTTPS中,TLS握手首先发生在HTTP对话开始之前(HTTPS仍使用HTTP –它只是加密HTTP消息)。 服务器可能会将错误的证书发送给客户端,因为它尚不知道客户端正在寻找哪个证书。 SNI将域名添加到TLS握手过程中,以便TLS进程到达正确的域名并接收正确的SSL证书,从而使其余TLS握手能够正常进行。
为什么Syslog向我们显示完整性检查失败?
1.主要原因是由于百度使用自己的海外CDN g.bdydns.com,而不是使用我们的Cloudflare CDN cdn.cloudflare.net。 如果没有SNI,这将导致客户端无法向服务器指示正在与之通信的主机名。 结果,服务器可能为错误的主机名生成SSL证书。 如果SSL证书上的名称与客户端尝试访问的名称不匹配,则客户端浏览器将返回错误并通常终止。
答:kaishustory域DNS查找是如何导致完整性检查失败的。
相反,cdn.cloudflare.net记录指向104.16.12.12和104.16.13.12。综上所述,核心问题是百度解决了错误的DNS记录问题,这直接导致了完整性检查失败。
我们建议kaishustory切换海外CDN流量并将其记录回cdn.cloudflare.net
网友评论