S3重定向到子目录

问题描述 投票:0回答:2

我在S3中使用Nginx提供了以下Nginx配置。

server {
    listen         80 default_server;
    server_name    localhost;
    keepalive_timeout 70;
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript;

    location / {
         proxy_pass http://my-bucket.s3-website-us-west-2.amazonaws.com;
         expires 30d;
    }

目前每当我构建新版本时,我只是删除目标存储桶包含并上传新的前端文件。

由于我正在删除存储桶包含,因此我无法返回到先前版本的前端,甚至在存储桶上启用了版本控制。所以想在S3存储桶中将新的前端文件上传到版本目录(例如15),然后设置从http://my-bucket.s3-website-us-west-2.amazonaws.com/latesthttp://my-bucket.s3-website-us-west-2.amazonaws.com/15的重定向

谁知道怎么做到这一点?

nginx amazon-s3 static-site
2个回答
1
投票

有多种方法可以做到这一点:

  • 最简单的可能是通过symbolic link,只要您的环境允许。 ln -fhs ./15 ./latest
  • 另一种选择是向用户发出明确的外部redirect,用户可以在其中看到新的URL;这样做的好处是可以同时访问多个版本而不会出现任何类型的同步问题,例如,如果客户端决定进行部分下载,一切都应该仍然很方便,因为他们很可能会这样做部分下载实际目标,而不是/latest快捷方式。 location /latest { rewrite ^/latest(.*) /15$1 redirect; }
  • 最后一个选项是nginx中的内部重定向;这在一些第三方应用程序中通常称为URL伪装;根据要求,这可能会也可能不会被推荐;一个明显的缺陷是部分下载,大下载的简历可能会导致文件损坏: location /latest { rewrite ^/latest(.*) /15$1 last; }

参考文献:


0
投票

处理这种情况的一种简单方法是使用变量。您可以轻松导入文件以设置当前的最新版本。使用此方法更新版本时,需要重新加载nginx配置。

  • 创建一个简单的配置文件以设置最新版本
# /path/to/latest.conf
set $latest 15;
  • 在服务器块中导入最新配置,并添加代理到最新版本的位置。
server {
    listen         80 default_server;
    server_name    localhost;

    # SET LATEST
    import /path/to/latest.conf;

    location / {
         proxy_pass http://s3host;
         expires 30d;
    }

    # Note the / at the end of the location and the proxy_pass directive
    # This will strip the "/latest/" part of the request uri, and pass the
    # rest like so: /$version/$remaining_request_uri
    location /latest/ {
        proxy_pass http://s3host/$latest/;
         expires 30d;
    }

    ...

}

动态执行此操作的另一种方法是使用lua来编写此行为的脚本。尽管如此,这是一个更多的参与,所以我不会为此回答。

© www.soinside.com 2019 - 2024. All rights reserved.