是否可以为此目标创建无服务器架构?

时间:2016-04-29 07:00:12

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

我有多个域名,如

x.static.abc.com
y.static.abc.com
z.static.abc.com

我想使用Route53&云端& s3提供静态内容。

当发送到 x.static.abc.com/1.png 的请求时,我需要将其软重写为 abc.com/static/x/1.png

我不想要301和302响应的重定向请求。所以我不想在启用网站托管选项的S3中使用重定向规则。

有什么办法吗?我需要你的解决方案或建议。 谢谢大家。

修改 我使用Route53&云端& s3,超过4年。这个问题不是关于“如何在rout53中定义DNS设置”这样的基础知识。

我在S3中创建了以x.static.abc.com命名的存储桶, 在属性中启用了网站托管设置, 我将端点添加到Route53,并将路由规则添加到重定向规则,如:

<RoutingRules>
    <RoutingRule>
        <Condition>
            <KeyPrefixEquals>..</KeyPrefixEquals>
        </Condition>
        <Redirect>
            <ReplaceKeyWith>...</ReplaceKeyWith>
        </Redirect>
    </RoutingRule>
</RoutingRules>

但这不是我要找的。因为它使用301或302重定向请求。

我正在寻找像cloudflare这样的选项:

  

解决覆盖(仅限企业):更改的原始地址   请求到URL。用户将在浏览器中看到域名   地址栏,但内容将从解析中的URL提供   领域。   https://support.cloudflare.com/hc/en-us/articles/200168306-Is-there-a-tutorial-for-Page-Rules-

2 个答案:

答案 0 :(得分:1)

是的,有可能。但这种方法有一个明显的缺点 - 你不应该使用static.abc.com,但最好是一个单独的域。为什么? Cookies;)

答案 1 :(得分:0)

在EC2上使用HAProxy执行此操作将是微不足道的,但如果我们仅限于使用AWS管理的产品,那么这是您可以获得的最接近的(并且它看起来非常接近):

使用以下配置创建CloudFront分配:

  • 分发集的备用域名设置为x.static.example.com

  • 原始服务器example.com,其原始路径(与原始服务器在同一屏幕上,与缓存行为中的路径模式混淆)设置为{{1} }

  • 默认缓存行为转发到源服务器,但配置以将/static/x标题列入白名单

  • 将Route 53中的x.static.example.com映射到新的CloudFront分配。

此配置的净效果是,传入的主机标头一旦被识别并用于将请求映射到此分发,就会被丢弃,并且源主机的主机名将作为主机标头发送。

进入CloudFront的原始请求:

Host:

从CloudFront发送到源服务器的请求:

GET /images/lolcat.jpg HTTP/1.1
Host: x.static.example.com

似乎合法。

对于每个主机名,您将需要其中一个,因为没有动态映射的规定,但CloudFront不会对分发的存在收费 - 只有流量 - 因此,没有坏处。我认为以上是一个非常直接的解决方案。