2009-02-20 97 views
12

我怎样才能改变Amazon S3的URL从http://bucket.amazons3.com/imagepath.jpghttp://image.mydomain.com/imagepath.jpgAmazon S3的URL重写

编辑: 基本上整个原因是为了隐藏我的用户Amazon S3的URL。

我在想一个HttpModule,它会将请求从image.mydomain.com重定向到bucket.amazons3.com。但是这需要我的服务器先处理所有请求然后转发。

+1

如果我的回答有用,请标记为已回答。 – Ramesh 2010-02-28 23:04:48

回答

22

如果我明白了,您需要指定您的域名而不是S3。为此,您需要编写一个处理程序,它将作为亚马逊服务器的代理。

但是,这实际上会将您的带宽增加一倍,因为您需要将图像发送到客户端以及为S3获取图像。

我不确定是否有任何S3具体的方式来处理这个问题。

下面是Amazon S3, CNAME record

采取Amazon S3的具体方式一般用户可以注册为 Amazon S3的托管,并开始上传 文件 - 接受默认URL托管文件 结构:

http://s3.amazonaws.com/your-bucket/some-file.txt 如果您计划使用S3来托管媒体文件(更具体地说是Flash文件 ),您将会遇到Adobe的跨域安全策略。该修复需要 将您的托管S3文件映射到 ,好像它们是从 服务于您自己的域 - 虚拟主机。该 最简单,最有吸引力的方法 将是喜欢 此托管文件网址:

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小时才能解决。

0

我看到它的方式,你有两个选择:

  1. 使重定向如你所说,或者
  2. 使从S3的资源请求,然后将它们返回用户通过你的回应。

所以,如果用户希望看到http://image.mydomain.com/imagepath.jpg资源,你可以在内部请求http://bucket.amazons3.com/imagepath.jpg原始资源,在本地保存并返回给发出请求的用户。

它确实花费了很多带宽,但如果这是您的关键要求,这应该是要走的路。

3

这听起来像你想生成到期链接,

http://www.ioncannon.net/s3/21/creating-s3-urls-that-expire-using-php/

然后,您可以生成这些上的苍蝇,并提供它们作为通过您的应用程序重定向。 所以有人请求, http://images.mydomain.com/img123.jpg

你生成一个不错的,自动到期S3网址, http://mydomain.s3.amazonaws.com/T154456.jpg?AWSAccessKeyId=1ESOMESPECIALIDJJAKJ6RA82&Expires=1241372284&Signature=ddfr%2BlkoSEPAL%2BGbMwlMzj6q%2BCY%3D

,那么你将用户重定向到自动生成的URL。这样,即使用户查看html源代码,他们也只能看到返回到您的网站的url,但当他们点击链接时,他们被重定向到亚马逊,因此您不必担心代理 请求通过您的服务器和吃不必要的带宽。

3

如果你有控制你的DNS为什么不设置CNAME?

我们有一个cname设置指向js.our-domain.com指向我们的一个桶(足够奇怪的JavaScript文件),然后我们只需引用js.our-domain.com/jquery.js(例如)我们去。

根据你的主机,也有任意数量的方式来建立CNAME的 - 谷歌搜索reveals many

6

为了详细说明TEZ的回答,亚马逊S3通过Virtual Hosting of Buckets提供了自定义映射域的支持。

要完成这项工作,您的存储桶的名称必须是您希望映射的完整主机名。

因此,使用原来的问题的例子,创建一个名为image.mydomain.com并成立了CNAME它的S3桶:

image.mydomain.com CNAME image.mydomain.com.s3.amazonaws.com. 
9

s3.amazonaws.com创建CNAME。就足够了。无需预先设置存储桶名称。

4

布赖恩的回答是正确的,拉梅什和文森特有错误。将CNAME设置为s3.amazonaws.com会导致我不必要的重定向,正如AWS虚拟主机桶指南here中所警告的那样。