【问题标题】:How to serve static/media contents (only) from s3 and others from EC2?如何从 s3 和 EC2 的其他内容(仅)提供静态/媒体内容?
【发布时间】:2015-11-28 09:08:28
【问题描述】:

我想从 S3 提供我的静态/媒体内容(现在是图像),但我的 url 应该是现在的样子。例如:

http://example.com/resources/img/me.jpg 是我当前的图像 url 之一,现在由本机服务器提供(EBS 存储随 EC2 提供)。现在我想把这个 me.jpg 文件存储在一个 s3 桶中,然后如果有人输入上面的 url,它就会从那里带来。

我知道这可以通过将存储桶名称创建为 example.com 和 www.example.com 然后为 s3-website-region.amazonaws.com 配置 Route 53 CNAME(别名)

但是当我输入 http://example.com/blog/cool-stuff-blog 时会发生什么? 这不适用于静态/媒体内容!它需要执行服务器端代码(Python/PHP)。

但是对于我当前工作域的上述配置会发生什么?它不会尝试从 S3 提供一些内容并失败吗?

我怎样才能完成它?请不要说有一个像 static.example.com 这样的子域并为其提供所有静态文件请求。对我来说,现在这是不可接受的。我想使用完全相同的域名。

【问题讨论】:

    标签: php amazon-web-services amazon-s3 amazon-ec2 codeigniter-2


    【解决方案1】:

    创建 CloudFront 分配。

    配置 2 个“源”服务器,一个作为您的主服务器,另一个作为您的 S3 存储桶。

    配置默认的* 路径模式以路由到您的主服务器,并配置/resources/* 以指向您的存储桶(或您需要的任何路径,您可以配置多个)。

    CloudFront 将每个请求与路径模式进行匹配,并根据第一个匹配模式将每个请求转发到适当的后端。

    如果您不想使用 CloudFront 的缓存功能,可以通过配置“将所有请求标头转发到源”选项来禁用它。

    将您的域名添加到与您的分配相关的备用域名列表中。

    选择适合您的工作负载和预算的 CloudFront 定价层 - 如果您的受众不在,您可以通过禁用更昂贵的 CloudFront 边缘站点来降低成本。

    测试后,将您的域名指向 CloudFront 分配,并在 Route 53 中使用别名 A-Record。

    如果您想通过单个主机名从多个存储桶或后端服务器集群的不同路径提供内容,您还可以添加其他“来源”。

    http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html

    【讨论】:

    • 感谢您的回答。但是存储桶配置集中也有高级重定向规则。我不能用它来满足 CloudFront 正在做什么(仅用于重定向)吗?
    • 不,如果我正确理解您的问题,则不会。 S3 中的重定向规则会将浏览器发送到不同主机名的资源——它不会在其他地方传递代理请求。对于给定的主机名,所有请求都转到一个地方。
    • ... 如果所需的特定资源在其他地方,则“一个地方”必须代表浏览器(Cloudfront 或另一个反向代理,包括 Apache、Nginx 中的配置或HAProxy)或重定向浏览器。如果浏览器请求的页面(在地址栏中)被重定向,当浏览器重新获取以响应重定向时,地址栏主机名将发生变化。
    • 好的,我不会使用 CloudFront,至少现在不会。那么我还有什么解决方案?我可以注册一个子域static.example.com 并针对 bucket name: static.example.com 将其配置为静态网站吗?这似乎是目前最简单的方法吧?我什至不必以这种方式配置虚拟主机(或者我必须这样做吗?)。
    • 如果你想要来自 S3 的静态内容并且你要链接到它,这将起作用,除非你的站点使用 https,因为 S3 上的虚/虚拟域 + SSL 需要提供 SSL 组件由(猜猜是谁?)CloudFront。
    【解决方案2】:

    就个人而言,我认为更新 url 并使用子域是更好的方法(仅供记录),但您应该能够在您的网络服务器配置中使用重写规则来完成您想要的。

    http://www.bennadel.com/blog/2172-redirecting-static-requests-to-amazon-s3-using-iis-mod-rewrite-or-apache-mod-rewrite.htm

    【讨论】:

    • 如果我配置一个 S3 存储桶 example.com(这是我的原始域)来提供静态内容,那么任何请求都应该先到那里,对吧?如果必须写入任何重定向,则要写入存储桶重定向规则,对吗?你为什么说我应该配置我的 Apache 服务器,因为它甚至不会直接收到请求?
    猜你喜欢
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多