S3 перенаправить в каталог S3
У меня есть сайт от 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;
}
В настоящее время всякий раз, когда я создаю новую версию, я просто удаляю целевой контейнер и загружаю в него новые файлы внешнего интерфейса.
Так как я удаляю содержимое корзины, я не могу вернуться к предыдущей версии веб-интерфейса, даже если в корзине включено управление версиями. Поэтому вы хотите загрузить новые файлы веб-интерфейса в версию dir (например, 1.1.300
) в ведро S3, а затем настроить перенаправление с http://my-bucket.s3-website-us-west-2.amazonaws.com/latest
в http://my-bucket.s3-website-us-west-2.amazonaws.com/1.1.300
кто-нибудь знает, как это можно сделать?
0 ответов
Есть несколько способов сделать это:
Самым простым может быть символическая ссылка, если это позволяет ваша среда.
ln -fhs ./15 ./latest
Другой вариант - явный внешний
redirect
выдается пользователю, где пользователь увидит новый URL; это дает преимущество в том, что к нескольким версиям можно обращаться одновременно без каких-либо проблем с синхронизацией, например, если клиент решает выполнить частичную загрузку, все должно быть удобно, потому что они, скорее всего, будут выполнять частичная загрузка по фактической цели, а не/latest
ярлык.location /latest { rewrite ^/latest(.*) /15$1 redirect; }
Последний вариант - это внутреннее перенаправление внутри nginx; это обычно называется маскировкой URL в некоторых сторонних приложениях; это может или не может быть рекомендовано, в зависимости от требований; очевидный недостаток - частичные загрузки, когда возобновление большой загрузки может привести к повреждению файлов:
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 для написания сценария этого поведения. Это немного сложнее, поэтому я не буду вдаваться в подробности этого ответа.