CloudFront 报告 apple-app-site-association(深层链接)的 5xx 错误,即使源服务器返回 HTTP 200

CloudFront reports 5xx errors for apple-app-site-association (deep linking) even though the origin server is returning HTTP 200

当我们 运行 在 退休 Tomcat 8 和 Java 8 运行 在 64 位亚马逊 Linux/3.3.8 使用 classic 负载均衡器,我们从未见过 HTTP 5xx 错误。

该平台已停用,因此我们创建了一个新环境 'Tomcat 8.5 with Corretto 11 running on 64bit Amazon Linux 2/4.1.3',在此过渡期间,我们从 AWS Classic Load Balancer 迁移到了更新的 Application Load Balancer .

从那以后,除了两个例外,一切都运行很顺利

1 - 任何 URL 引用 myapp.com//rest/something 失败(double-slash 需要删除,我不确定为什么这突然成为一个问题 -但它已通过仅影响我们的 UAT 测试的简单代码调整解决)

2 - 我注意到 CloudFront 门户中显示了一堆 HTTP 5xx 错误。这就是我在这个问题中所关注的。

您会注意到也有 2xx 响应,因此这排除了有关 SSL 配置不正确的最常见问题 - 我本以为它们都会失败,而不是其中的 50%。

我看到 2-4% 的错误率,我从 popular-objects table 假设它们都是 deep-link相关。

我已验证通过浏览器(和 curl)访问 deep-link 文件时页面 returns 具有 HTTP 200 状态。我尝试通过 CDN 并使用 AWS public elastic beanstalk URL.

直接访问 load-balancer

我看到报告说 miss-configuring SSL 会导致这些 502 错误,但是我已经为不同的 URL 路径设置了多个行为,它们都使用相同的 SSL 证书。此外,您可以从第一个屏幕截图中看到,大约 50% 的请求命中了缓存,其中 4,300 个是 HTTP 成功 2xx。

我已经使缓存失效,5-10 分钟后速度没有变得更糟,所以我不得不得出结论,CDN 和源站通信正常,至少有一半时间是这样。

我还看到 server-side re-directs (HTTP 301) 可能导致来自 CloudFront 的 HTTP 5xx 的报告,但我已经验证了 deep-link URLs(例如 apple-app-site-association)它是一个静态 HTML 文件,没有重定向过滤器妨碍。

我尝试比较 CloudFront 日志以将其与 HTTP 2xx 和 5xx 响应进行比较,但没有明显的模式可供我解释。例如,我看到错误和成功使用相同的 SSL protocols/ciphers(虽然我不太了解这个领域!),下面只是每个 HTTP 响应类别中的几个示例

502

  13: 2020-12-27    00:00:03    AMS54-C1    1304    [ip-redacted]   GET d2yrbvancsuyx.cloudfront.net    /apple-app-site-association 502 -   swcd%20(unknown%20version)%20CFNetwork/1126%20Darwin/19.5.0 -   -   Error   TC10VGvkak58IlwqwCXpG9_GiR3HZR5vaouaC3AhiU6U5vFKbItI5g==    mycompany.com   https   230 0.073   -   TLSv1.3 TLS_AES_128_GCM_SHA256  Error   HTTP/1.1    -   -   54519   0.073   OriginConnectError  text/html   951 -   -

   50: 2020-12-27   00:00:05    WAW50-C1    1304    [ip-redacted]   GET d2yrbvancsuyx.cloudfront.net    /.well-known/apple-app-site-association 502 -   swcd%20(unknown%20version)%20CFNetwork/976%20Darwin/18.2.0  -   -   Error   lCjWcds-6t1jOt1GI1mII-7DoPVKEE8mIxtT5sGZpWN7vj6t2gqBcQ==    mycompany.com   https   241 0.096   -   TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Error   HTTP/1.1    -   -   63785   0.095   OriginConnectError  text/html   951 -   -

   51: 2020-12-27   00:00:05    WAW50-C1    1312    [ip-redacted]   GET d2yrbvancsuyx.cloudfront.net    /apple-app-site-association 502 -   swcd%20(unknown%20version)%20CFNetwork/976%20Darwin/18.2.0  -   -   Error   g8Zj46gI3HMK3KJehze1u9WYMlxCl8dlIjc3vZFat-Jx3HmZD_I17w==    mycompany.com   https   229 0.050   -   TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Error   HTTP/1.1    -   -   63785   0.050   Error   text/html   951 -   -

200个


   23: 2020-12-27   00:00:08    LHR3-C2 598 [ip-redacted]   GET d2yrbvancsuyx.cloudfront.net    /.well-known/apple-app-site-association 200 -   swcd%20(unknown%20version)%20CFNetwork/1128.0.1%20Darwin/19.6.0 -   -   Hit tdbpQ0zxszX4y70H9vniecKe9HP3xwd_KeI5SjrlckgrKNgsTJJFdA==    www.mycompany.com   https   250 0.001   -   TLSv1.3 TLS_AES_128_GCM_SHA256  Hit HTTP/1.1    -   -   10372   0.001   Hit -   193 -   -

   45: 2020-12-27   00:00:11    AMS54-C1    599 [ip-redacted]   GET d2yrbvancsuyx.cloudfront.net    /.well-known/apple-app-site-association 200 -   swcd%20(unknown%20version)%20CFNetwork/1126%20Darwin/19.5.0 -   -   Hit QpbX2mGlhzXZR1gBC-HaZfBA-q5VWUC6t4NQgb6w3At4sCGhIz8ihQ==    www.mycompany.com   https   246 0.001   -   TLSv1.3 TLS_AES_128_GCM_SHA256  Hit HTTP/1.1    -   -   54526   0.001   Hit -   193 -   -

   53: 2020-12-27   00:00:07    WAW50-C1    599 [ip-redacted]   GET d2yrbvancsuyx.cloudfront.net    /.well-known/apple-app-site-association 200 -   swcd%20(unknown%20version)%20CFNetwork/976%20Darwin/18.2.0  -   -   Hit UjQtTqnrlVbupxZmXj8RxwwISCfXgJ8viMD38vvEYXdmO-UWcFjk3A==    www.mycompany.com   https   245 0.002   -   TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Hit HTTP/1.1    -   -   63787   0.002   Hit -   193 -   -

当我启动我们的应用程序时,deep-link URL 正在正确处理;启动应用程序而不是显示浏览器,并按预期呈现详细信息。我什至从应用程序商店中删除了应用程序和 re-installed 并且 deep-linking 已按预期注册。

已使用 Apache HTTP 服务器(而不是 NGINX)设置弹性 beantalk,它托管在 Europe/Ireland 中,并带有匹配 *.mycompany www.mycompany 和其他一些 sub-domains。我可以使用弹性 beantalk public URL 直接访问它并给出证书警告,但这是可以预料的,因为证书是针对 mycompany 而不是 mycomapny.eu-west-1.elasticbeanstalk.com - 检查证书显示它是有效的(未过期)并且对于域 mycompany.com,我已经将它添加到我的信任库中以继续查看文件 - 它按预期通过 HTTP 200 正常返回。

不幸的是,CloudFront CDN 没有引用 AWS EU/Ireland SSL 证书的选项,因此我使用 AWS 证书管理器 (ACM) 通过 US/East (北弗吉尼亚州)。

CloudFront 在内部从源检索数据并设置为使用 HTTP 或 HTTPs,然后使用 EU/Ireland SSL 证书访问源。

就像我说的,这一切都适用于所有其他 CDN 行为,但出于某种原因,5xx 仅在流行的 objects table 中显示(我认为这都是 502 错误)对于 deep-link 个文件。

应用程序日志没有显示任何问题,但我认为它们甚至没有到达原点,因此出现 5xx 错误。

有谁知道如何通过 CloudFront --> Application Load Balancer --> Apache --> 我们的静态 HTML 页面解决 5xx 错误?

明确地说,我们在使用 CloudFront 时没有看到这个问题 --> CLASSIC 负载均衡器。

所有行为都与以前相同,我所做的只是将新源添加到 CloudFront 分布,然后更改每个行为以引用 new 源。

仅供参考,虽然 AWS 中存在一个错误,但在编辑行为期间它清除了白名单 headers,因此我不得不重新选择 'Host',否则页面已通过验证'To use SSL with an ELB origin, either forward all headers or whitelist the Host header. If you do not want to forward any headers, change the Origin Protocol Policy to HTTP Only.'

的错误

目前看来问题与 SSL 证书如何为 *.mycompany.com 通配有关,但通配符不涵盖通过 mycompany.com(直接访问 apex)访问站点。

我怀疑我需要编辑或创建新的 ACM 预配证书,明确 列出 mycompany.com 和 *.mycompany.com - 我是等待 AWS 的确认。

看来 Apple 必须在没有 www 前缀的情况下从我们的服务器请求文件,但也许一旦失败,它会使用 www 前缀重试,我认为这可以解释为什么我看到几乎 50% 的失败(第一次失败,重试 = 50% 成功)。

更新:我可以确认,除了通配符域(*. mycompany.com) 错误不再出现。