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
EXPERTE
gefragt vor 10 Monaten77 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 10 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen

Relevanter Inhalt