如何将 Amazon S3 url 从 http://bucket.amazons3.com/imagepath.jpg更改 为 http://image.mydomain.com/imagepath.jpg
编辑:基本上,这样做的全部原因是对我的用户隐藏 amazon s3 url。
我正在考虑一个 HttpModule,它将请求从 image.mydomain.com 重定向到 bucket.amazons3.com。但这需要我的服务器首先处理所有请求,然后再转发。
如何将 Amazon S3 url 从 http://bucket.amazons3.com/imagepath.jpg更改 为 http://image.mydomain.com/imagepath.jpg
编辑:基本上,这样做的全部原因是对我的用户隐藏 amazon s3 url。
我正在考虑一个 HttpModule,它将请求从 image.mydomain.com 重定向到 bucket.amazons3.com。但这需要我的服务器首先处理所有请求,然后再转发。
如果我理解,您需要指定您的域名而不是 S3。为此,您需要编写一个处理程序,它将充当亚马逊服务器的代理。
但是,这实际上会使您的带宽加倍,因为您需要将图像发送到客户端以及为 S3 获取图像。
我不确定是否有任何 S3 特定的方法来处理这个问题。
以下是取自Amazon S3、CNAME 记录的 Amazon S3 特定方式
普通用户可以注册 Amazon S3 托管并开始上传文件 - 接受托管文件的默认 URL 结构:
http://s3.amazonaws.com/your-bucket/some-file.txt 如果您计划使用 S3 来托管媒体文件 - 更具体地说是 Flash 文件 - 您将遇到 Adobe 的跨域安全策略。该修复需要映射您托管的 S3 文件,使其看起来好像是从您自己的域(虚拟主机)提供的。最简单和最有吸引力的方法是托管文件 URL,如下所示:
http://s3.your-site.com/some-file.txt 要开始使用,请在 S3 上创建一个您希望作为托管文件根目录的存储桶。对于此示例,您的 S3 存储桶将是:
s3.your-site.com 最重要的一步是将适当的 CNAME 记录添加到您的 DNS 设置中。
名称类型数据 s3.your-site.com CNAME s3.amazonaws.com。预计您的新 DNS 设置最多需要 24-48 小时才能解决。
在s3.amazonaws.com上创建 CNAME 。足够了。无需预先添加存储桶名称。
为了详细说明 Tez 的答案,Amazon S3 提供了对通过虚拟托管 Buckets映射自定义域的支持。
要完成这项工作,您的存储桶的名称必须是您希望映射的完整主机名。
因此,使用原始问题中的示例,创建一个名为的 S3 存储桶image.mydomain.com
并为其设置一个 CNAME:
image.mydomain.com CNAME image.mydomain.com.s3.amazonaws.com.
听起来你想生成过期链接,
http://www.ioncannon.net/s3/21/creating-s3-urls-that-expire-using-php/
然后,您可以即时生成这些,并通过您的应用程序将它们作为重定向提供。所以有人要求, http: //images.mydomain.com/img123.jpg
并且您生成了一个不错的自动过期 s3 url, http ://mydomain.s3.amazonaws.com/T154456.jpg?AWSAccessKeyId=1ESOMESPECIALIDJJAKJ6RA82&Expires=1241372284&Signature=ddfr%2BlkoSEPAL%2BGbMwlMzj6q%2BCY%3D
然后将用户重定向到自动生成的 url。这样,即使用户查看 html 源代码,他们也只会看到指向您网站的 url,但是当他们点击链接时,他们会被重定向到亚马逊,因此您不必担心通过代理请求您的服务器并占用不必要的带宽。
Bryan 的回答是正确的,而 Ramesh 和 Vincent 的回答有误。将 CNAME 设置为 s3.amazonaws.com 会导致不必要的重定向,正如 AWS Virtual Hosting of Buckets 指南中所警告的那样。
如果您可以控制 DNS,为什么不设置 CNAME?
我们有一个 cname 设置指向 js.our-domain.com 指向我们的一个存储桶(奇怪的是 javascript 文件),然后我们只引用 js.our-domain.com/jquery.js (例如)然后我们就走了。
根据您的主机,有多种设置 CNAME 的方法 - 谷歌搜索显示许多
在我看来,你有两个选择:
因此,如果用户想查看http://image.mydomain.com/imagepath.jpg资源,您可以在内部从http://bucket.amazons3.com/imagepath.jpg请求原始资源,将其保存在本地并返回它给请求的用户。
它确实花费了大量带宽,但如果这是您的关键要求,那么这应该是可行的方法。