S3 перенаправление в подкаталог - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть сайт, обслуживаемый с 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 (например, 15) в корзину S3, а затем настроить перенаправление с http://my-bucket.s3-website-us-west-2.amazonaws.com/latest на http://my-bucket.s3-website-us-west-2.amazonaws.com/15

, кто-нибудь знает, как это можно сделать?

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Одним из простых способов справиться с этой ситуацией является использование переменных.Вы можете легко импортировать файл, чтобы установить текущую последнюю версию.Вам нужно будет перезагрузить конфигурацию 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 для написания сценария такого поведения.Это немного сложнее, поэтому я не буду вдаваться в подробности этого ответа.

0 голосов
/ 08 марта 2019

Есть несколько способов сделать это:

  • Самым простым может быть использование символической ссылки , при условии, что ваша среда позволяет это.

    ln -fhs ./15 ./latest
    

  • Другой вариант - это явное external redirect, выданное пользователю, где пользователь увидит новый URL;это дает преимущество в том, что к нескольким версиям можно обращаться одновременно без каких-либо проблем с синхронизацией, например, если клиент решает выполнить частичную загрузку, все должно быть удобно, потому что они, скорее всего, будут выполнятьчастичная загрузка по фактической цели, а не по ярлыку /latest.

    location /latest {
        rewrite ^/latest(.*)    /15$1   redirect;
    }
    

  • Последний вариант - внутреннее перенаправление внутри nginx;это обычно называется маскировкой URL в некоторых сторонних приложениях;это может или не может быть рекомендовано, в зависимости от требований;очевидным недостатком будет частичная загрузка, при которой возобновление большой загрузки может привести к повреждению файлов:

    location /latest {
        rewrite ^/latest(.*)    /15$1   last;
    }
    

Ссылки:

...