使Amazon S3内容的网址看起来像本机网站网址

时间:2014-01-15 15:05:46

标签: url amazon-s3 amazon-cloudfront

我有一个网站,例如mywebsite.com,我使用Amazon S3作为它的存储。我需要做的是将我的内容的网址放在S3上,看起来像本地网站网址。

E.g。

http://s3-eu-west-1.amazonaws.com/img-bucket/flowers/flower.jpg

应该是

http://www.mywebsite.com/flowers/flower.jpg

或至少喜欢

http://www.mywebsite.com/img-bucket/flowers/flower.jpg

我可以在不使用CloudFront和别名 img-bucket www.mywebsite.com 的情况下以某种方式实现此目的吗?

我看到的其他问题是,我有大拇指的图像,存储在同一个桶 / img-bucket / thumb / 内的“文件夹”中,但拇指应该可以被其他网址访问,例如

http://thumbs.mywebsite.com/flowers/flower.jpg

是否有可能在没有太多变化的情况下实现这一目标?因为现在我觉得至少我需要将CloudFront用于原始图像,并将原始图像和拇指分成2个不同的桶。

1 个答案:

答案 0 :(得分:3)

通过CNAME

亚马逊建议实现这一目标,通过您网域中的CNAME获得类似http://images.mywebsite.com/flowers/flower.jpg的内容。

要实现这一点,您必须创建一个名为主机(images.mywebsite.com)的存储桶,并在您的域中添加指向您的存储桶的CNAME记录。

CNAME记录应该是这样的:

images.mywebsite.com CNAME                 images.mywebsite.com.s3.amazonaws.com.

可以在the official documentation of Amazon S3找到更多信息。

代理前端Web服务器

但是,如果上一个选项仍然不适合您的需要,您可以使用第二个选项,即调整前端Web服务器以在访问特定URL时充当代理。

如果您使用的是Nginx,可以使用HttpProxyModule执行此操作,并且必须将此配置添加到您的nginx.conf文件中:

location ~* ^/images/(.*) {
  set $s3_bucket        'your_bucket.s3.amazonaws.com';
  set $url_full         '$1';

  proxy_http_version     1.1;
  proxy_set_header       Host $s3_bucket;
  proxy_set_header       Authorization '';
  proxy_hide_header      x-amz-id-2;
  proxy_hide_header      x-amz-request-id;
  proxy_hide_header      Set-Cookie;
  proxy_ignore_headers   "Set-Cookie";
  proxy_buffering        off;
  proxy_intercept_errors on;

  resolver               172.16.0.23 valid=300s;
  resolver_timeout       10s;
  proxy_pass             http://$s3_bucket/$url_full;
}

使用此功能,您可以使用以下网址检索S3文件:http://www.mywebsite.com/images/flowers/flower.jpg

此选项的缺点是,网络服务器将自己检索文件以将其传递给用户,从而导致速度变慢。