AWS Cloudfront modifies Strapi headers



我在位于ALB后面的ECS集群上运行Strapi。我在负载平衡器前面放了一个Cloudfront分布,但它在登录后就破坏了应用程序。对于routes/content-manager/content-types、/admin/information和/i18n/locale,我在通过Cloudfront时得到404响应。

我注意到的是,当使用Cloudfront时,这些调用的响应具有"内容类型:text/plain";我不知道它是从哪里来的。请注意,这种情况只发生在这些特定的调用中,请求没有改变。

下面是example.com/content-types WITHOUT Cloudfront的响应:

HTTP/2 200 OK
date: Wed, 04 Aug 2021 04:59:52 GMT
content-type: application/json; charset=utf-8
content-length: 25870
vary: Origin
strict-transport-security: max-age=31536000; includeSubDomains
x-frame-options: SAMEORIGIN
x-powered-by: Strapi <strapi.io>
x-response-time: 42ms
X-Firefox-Spdy: h2

下面是example.com/content-types WITH Cloudfront的响应:

HTTP/2 404 Not Found
content-type: text/plain; charset=utf-8
content-length: 9
date: Wed, 04 Aug 2021 04:55:46 GMT
strict-transport-security: max-age=31536000; includeSubDomains
x-frame-options: SAMEORIGIN
x-powered-by: Strapi <strapi.io>
x-response-time: 2ms
x-cache: Error from cloudfront
via: 1.1 <masked>.cloudfront.net (CloudFront)
x-amz-cf-pop: <masked>
x-amz-cf-id: <masked>
X-Firefox-Spdy: h2

我已经设法绕过它,通过创建一个允许所有头的行为,但感觉就像在麻雀射击大炮-有人知道为什么Strapi响应不同/为什么Cloudfront不为特定的调用转发头吗?

看来您的应用程序需要某些请求值才能返回正确的响应。当你把CloudFront放在你的应用程序前面时,其中一些值没有到达你的原点,你的应用程序返回了一个不同的响应(404而不是200)。

默认情况下,CloudFront不发送所有的头/请求值到您的原点。您需要确定您的应用程序需要什么请求值,然后确保这些特定的头/查询字符串/cookie值由CloudFront发送到您的原点。您可以使用缓存策略如果值应该包含在缓存键中,或者原始请求策略中如果您想将值发送到原点,但不包含在缓存键中。

最新更新