我正在尝试以这样的方式配置我的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,但我认为这对网址不起作用。
知道如何解决这个问题。
感谢。
答案 0 :(得分:2)
Nginx S3代理可以处理动态构建的URL,您也可以隐藏目录甚至是私钥等部分AWS Key:
例如基础网址如下:
结果网址:
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