CloudFront会将重定向(301)到自定义来源(ELB)而不是缓存该请求。

0

【以下的问题经过翻译处理】 客户将CloudFront配置在ELB前面,当他尝试通过CloudFront URL访问网站时,CloudFront发送重定向(301)到ELB的URL(浏览器中的URL从CloudFront URL更改为ELB URL),而不是由CloudFront直接提供请求。

他们的自定义源站将所有http流量重定向到https。我怀疑当用户通过http地址访问网站时,CloudFront将请求发送到自定义源(ELB),源将此重定向(301)发送到https再返还给CloudFront,而CloudFront缓存此重定向。在随后的请求中,CloudFront将向客户端发送此缓存的重定向,因此客户端只是被重定向到自定义源,并在浏览器中看到URL的改变。这在此页面(https://stackoverflow.com/questions/20503322/cloudfront-distribution-with-custom-origin-redirects-request)中解释了。这样理解是正确的吗?

有什么办法解决这个问题?我看到将"Origin Protocol Policy"更改为"Match Viewer"可能会解决这个问题?有人可以帮忙确认吗?

profile picture
专家
已提问 5 个月前22 查看次数
1 回答
0

【以下的回答经过翻译处理】 除非客户在CloudFront配置了转发Host Header,否则客户的源站将接收在CloudFront中配置的源站主机名(即ELB的主机名)。

因此假设网站的公共主机名(且在CloudFront上设置了CNAME)为www.mysite.com,而ELB的主机名为my-loadbalancer.us-west-2.elb.amazonaws.com。当客户端发送:

GET /page HTTP/1.1
Host: www.mysite.com

如果未将Host标头转发到源站,则源站将接收到以下请求:

GET /page HTTP/1.1
Host: my-loadbalancer.us-west-2.elb.amazonaws.com

而如果未通过HTTPS发送,则源站可能会简单地将https://,Host标头和path连接起来发出重定向响应:

HTTP/1.1 301 Moved Permanently
Location: https://my-loadbalancer.us-west-2.elb.amazonaws.com/page

CloudFront会将此返回给客户端,因此客户端将直接转到ELB。

正如其他人指出的,您可以在CloudFront上配置将HTTP请求重定向到HTTPS,并强制所有请求到源站都是HTTPS。这样就能解决问题,因为源站重定向将永远不会被执行。

如果源站重定向需要执行额外的逻辑,您可以配置 CloudFront 将 Host 标头转发到源站,这样它就会重定向到公共主机名,或者您可以修改源站,将公共主机名作为配置存储,并重定向到公共主机名,而不是使用 Host 标头。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则