将 CloudFront 放在 AWS Amplify 前面时如何避免 301 重定向循环?
How to avoid a 301 redirect loop when putting a CloudFront in front of AWS Amplify?
背景
我们希望 CloudFront 充当 AWS Amplify SPA 前面的路由器。这样做的原因是我们需要在所有 SPA 之间共享一个公共域,以便我们可以共享 localStorage。因此,每个 SPA 都将托管在 CloudFront 上的 sub-path。我们使用 Amplify 的原因是因为我们使用的是客户端路由,所以我们需要将请求从 https://spaOne-amplify.com/spaOne/pages/somePage 重定向到 index.html
基本的想法是,我们将有一个 CloudFront,proxies/caches 所有从 https://cloudFrontDomain.com/spaOne/*
到 https://spaOne-amplify.com/spaOne/*
的请求。
问题
但是,出于某种原因,当 Amplify 托管的 SPA 收到看起来像是来自 CloudFront 的 Via
header 时,它会进入重定向循环。
GET
https://spaOne-amplify.com/spaOne
301
- /someRandomId/
GET
https://spaOne-amplify.com/someRandomId
301
- /someRandomId/
- ...等等等等
我在任何地方都找不到任何关于此行为的详细说明,而且我不知道如何避免它。如果我删除 Via
header 或更改它,行为就会停止。
以下会导致重定向循环:
Via:
1.17331c3ff7c4cd86239addbfddaa5cee4.cloudfront.net(云端)
Via:
1.1abc.cloudfront.net(云端)
但这些不是:
Via:
1.1 7331c3ff7c4cd86239addbfddaa5cee4.cloudfront.net
Via:
1.1 spaOne-amplify.com (CloudFront)
所以这里的想法是使用目标组来加载分布(或为您的网络重定向规则)。默认情况下,我不确定是否有办法在 CloudFront 中执行此操作。
但是可以通过创建负载均衡器(在您的情况下是应用程序)然后在您的 CloudFront 实例中将 origin 指定为您的负载均衡器来完成。
一旦所有内容都通过负载均衡器,您就可以创建 Target Groups 并将您的重定向行为指向一个或另一个源。
背景
我们希望 CloudFront 充当 AWS Amplify SPA 前面的路由器。这样做的原因是我们需要在所有 SPA 之间共享一个公共域,以便我们可以共享 localStorage。因此,每个 SPA 都将托管在 CloudFront 上的 sub-path。我们使用 Amplify 的原因是因为我们使用的是客户端路由,所以我们需要将请求从 https://spaOne-amplify.com/spaOne/pages/somePage 重定向到 index.html
基本的想法是,我们将有一个 CloudFront,proxies/caches 所有从 https://cloudFrontDomain.com/spaOne/*
到 https://spaOne-amplify.com/spaOne/*
的请求。
问题
但是,出于某种原因,当 Amplify 托管的 SPA 收到看起来像是来自 CloudFront 的 Via
header 时,它会进入重定向循环。
GET
https://spaOne-amplify.com/spaOne301
- /someRandomId/GET
https://spaOne-amplify.com/someRandomId301
- /someRandomId/- ...等等等等
我在任何地方都找不到任何关于此行为的详细说明,而且我不知道如何避免它。如果我删除 Via
header 或更改它,行为就会停止。
以下会导致重定向循环:
Via:
1.17331c3ff7c4cd86239addbfddaa5cee4.cloudfront.net(云端)Via:
1.1abc.cloudfront.net(云端)
但这些不是:
Via:
1.1 7331c3ff7c4cd86239addbfddaa5cee4.cloudfront.netVia:
1.1 spaOne-amplify.com (CloudFront)
所以这里的想法是使用目标组来加载分布(或为您的网络重定向规则)。默认情况下,我不确定是否有办法在 CloudFront 中执行此操作。
但是可以通过创建负载均衡器(在您的情况下是应用程序)然后在您的 CloudFront 实例中将 origin 指定为您的负载均衡器来完成。
一旦所有内容都通过负载均衡器,您就可以创建 Target Groups 并将您的重定向行为指向一个或另一个源。