我在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/latest
到http://my-bucket.s3-website-us-west-2.amazonaws.com/15
的重定向
谁知道怎么做到这一点?
有多种方法可以做到这一点:
ln -fhs ./15 ./latest
redirect
,用户可以在其中看到新的URL;这样做的好处是可以同时访问多个版本而不会出现任何类型的同步问题,例如,如果客户端决定进行部分下载,一切都应该仍然很方便,因为他们很可能会这样做部分下载实际目标,而不是/latest
快捷方式。
location /latest {
rewrite ^/latest(.*) /15$1 redirect;
}
location /latest {
rewrite ^/latest(.*) /15$1 last;
}
参考文献:
处理这种情况的一种简单方法是使用变量。您可以轻松导入文件以设置当前的最新版本。使用此方法更新版本时,需要重新加载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来编写此行为的脚本。尽管如此,这是一个更多的参与,所以我不会为此回答。