从amazom s3存储桶中检索静态文件

时间:2015-08-10 17:52:41

标签: amazon-web-services nginx amazon-s3

我正在尝试以这样的方式配置我的nginx:每当有一些错误的网关响应时,我尝试从s3存储桶中获取静态html内容。

请求的url结构是some_bucket / folder1 / folder2 / text

数据存储在s3存储桶中,目录结构为s3.amazonaws.com/some_bucket/folder1/folder2/folder1_folder2.html

我无法确定folder1和folder2的值,以便我可以制作 动态创建html文件并使用proxy_pass。 此外,我尝试了try_files,但我认为这对网址不起作用。

知道如何解决这个问题。

感谢。

2 个答案:

答案 0 :(得分:2)

Nginx S3代理可以处理动态构建的URL,您也可以隐藏目录甚至是私钥等部分AWS Key:

例如基础网址如下:

  

https://your_bucket.s3.amazonaws.com/readme.txt?AWSAccessKeyId=YOUR_ONLY_ACCESS_KEY&Signature=sagw4gsafdhsd&Expires=3453445231

结果网址:

  

https://your_server/proxy_private_file/readme.txt?st=sagw4gsafdhsd&e=3453445231

配置并不困难:

location ~* ^/proxy_private_file/(.*) {
  set $s3_bucket        'your_bucket.s3.amazonaws.com';
  set $aws_access_key   'AWSAccessKeyId=YOUR_ONLY_ACCESS_KEY';
  set $url_expires      'Expires=$arg_e';
  set $url_signature    'Signature=$arg_st';
  set $url_full         '$1?$aws_access_key&$url_expires&$url_signature';

  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;

  proxy_pass             http://$s3_bucket/$url_full;  
}

有关详细信息,请参阅full configuration

答案 1 :(得分:0)

这是我为可能遇到此问题的人(可能是新手)所做的。

 location ~* ^/some_bucket/(.*)/(.*)/.* {
      proxy_pass http://s3.amazonaws.com/some_bucket/$1/$2/$1_$2.html;
 }

〜*表示不区分大小写的正则表达式匹配 ^意味着什么之前 ()用于捕捉参数。

例如, 用户输入www.example.com/some_bucket/folder1/folder2/text

然后,它被处理为,

〜*确保不区分大小写的搜索(对于区分大小写的跳过*(表示只是放〜))

^匹配www.example.com。

然后

/ some_bucket /匹配,

。*表示任意数量的任何字符(对于任何数字,替换为[0-9] *)

()确保匹配的值被捕获

所以,$ 1捕获folder1

$ 2捕获folder2

然后

。*没有括号匹配任何字符但没有捕获匹配的值

现在可以使用捕获的值来使用

在亚马逊桶中查找文件

proxy_pass http://s3.amazonaws.com/some_bucket/ $ 1 / $ 2 / $ 1_ $ 2.html

https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms可以提供帮助