【发布时间】:2014-03-15 15:43:53
【问题描述】:
我有一个 S3 存储桶,其中包含我网站的静态内容,我有一个 EC2 实例来接收到该网站的所有流量。
我想让对 EC2 的每个请求都从我的 S3 返回一个特定文件,但我想让 URL 与用户插入的 URL 相同。
示例:假设我的文件位于 /path/index.html 如果用户向 www.mydomain.com 发出请求,我想提供该文件,如果用户向 www.mydomain.com/some/random/path/ 发出请求,我仍然想提供同一个文件。最后一个要求是位置保持不变。也就是说,即使提供了相同的文件,用户仍会在浏览器中看到 www.mydoamin.com 和 www.mydoamin.com/some/random/path/。
这是我到目前为止的 nginx 配置文件,它似乎不起作用:
server {
listen 80;
ssl off;
location / {
proxy_http_version 1.1;
proxy_set_header Host 'some-host.s3.amazonaws.com';
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 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;
proxy_pass http://some-host.s3.amazonaws.com/front-end/index.html;
}
}
对如何进行这项工作有任何想法吗?
谢谢!
【问题讨论】:
-
您想使用代理来保留您的域。看起来你已经有了。要将相同的规则应用于他们选择的任何路径,我认为您可以只使用 url 重写(不要与重定向混淆)。更简单的是,我认为您可以像 location /* 这样的位置进行模式匹配,然后代理 url 将保留用户输入的任何内容
-
如果这里只有静态文件可以尝试缓存:gist.github.com/mikhailov/9639593
-
@mikhailov 谢谢!这是一个 AngularJS 网站。因此,该站点由静态文件组成,但会不断更新。大多数站点的文件都是版本化和缓存的,但我不缓存 index.html 文件,因为我希望用户始终获得它的最新版本。
标签: amazon-web-services nginx amazon-ec2 amazon-s3