我有一个网站,例如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个不同的桶。
答案 0 :(得分:3)
亚马逊建议实现这一目标,通过您网域中的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服务器以在访问特定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
此选项的缺点是,网络服务器将自己检索文件以将其传递给用户,从而导致速度变慢。