【问题标题】:Cloudfront not reached when integrated with Route 53与 Route 53 集成时未到达 Cloudfront
【发布时间】:2014-08-01 12:31:34
【问题描述】:

我正在尝试让 Cloudfront 用于我的解决方案。我正在使用 Route 53 + CloudFront + ELB。

考虑以下几点: 1. Route 53 通过记录集别名指向 CloudFront。 2. CloudFront通过源域名指向ELB。 3. CloudFront 将备用域名设置为我的自定义域 (mysite.com)

如果我使用 CloudFront 域名 (d1ngxxxx.cloudfront.net) 或自定义域 (mysite.com) 发出请求,初始请求将发送到 CloudFront,后者以 HTTP 302 进行响应。所有后续请求(针对资源像图像、css、js ..) 是绕过 CloudFront 直接生成到 ELB 域名的。 我应该怎么做才能让所有请求都通过 CloudFront?

先谢谢了!

【问题讨论】:

    标签: amazon-web-services amazon-cloudfront amazon-route53


    【解决方案1】:

    我想不出 Cloudfront 会发出这些重定向的情况。

    似乎您的服务器本身正在发出 302 重定向,因为它不喜欢从 Cloudfront 获取的 Host: 标头。

    Host: CloudFront 将该值设置为与请求的对象关联的源的域名。

    ——http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html

    Cloudfront 然后将重定向返回给浏览器。

    Cloudfront 还可以缓存此类重定向,因此在进行故障排除时请注意这一点。响应标头应指示 cloudfront 是否针对特定响应前往源:

    X-Cache: Miss from cloudfront
    

    ...或者云端是否从缓存中处理请求。

    X-Cache: Hit from cloudfront
    

    解决此问题的两种可能方法

    如果您的旧代码对 Host: 标头做出负面反应,您可以重新配置 Web 服务器以在代码能够看到该值之前对其进行修改,这样就不会发生重定向。

    或者,你可以使用一些外部的东西,一个反向代理引擎,比如 Varnish 或 HAProxy(我已经提到了elsewhere)。在HAProxy中,举个简单的例子:

    reqirep ^Host:\ .* Host:\ expected-domain.example.com if { hdr(host) -i unexpected-domain.example.com }
    

    与此类似的规则将在存在该标头的所有传入请求中将 Host: unexpected-domain.example.com 标头替换为 Host: expected-domain.example.com,这应该使您的旧代码满意并避免重定向。在遗留系统前运行 HAProxy 不会带来很大的负载,因为代码非常紧凑。我所有的旧 Web 系统现在都以这些系统为前端,让我能够比其他方式更轻松地操纵和修改行为。

    【讨论】:

    • 感谢您的回答。你的假设是正确的。我在这里检查过,重定向来自我的服务器。问题是有很多遗留代码,我不能只更改重定向。
    • 我在答案中添加了一些可能有用的建议。
    • 好建议!我会试试 HAProxy。
    猜你喜欢
    • 2013-02-17
    • 2021-05-13
    • 2021-05-30
    • 2019-07-04
    • 1970-01-01
    • 2020-02-01
    • 2018-04-01
    • 1970-01-01
    • 2017-03-14
    相关资源
    最近更新 更多