Перенаправление / перезапись (в nginx) запросов к подкаталогу в S3-совместимую корзину - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь заставить nginx перенаправлять / переписывать запросы в конкретный подкаталог, чтобы они обслуживались S3-совместимым хранилищем вместо сервера.Вот мой текущий серверный блок:

{snip} (См. infra .)

Несмотря на то, что я возился с этим в течение некоторого времени, я смог получить толькочтобы вернуть 404 с.

Дополнительная информация

https://omnifora.com/t/redirect-rewrite-in-nginx-requests-to-subdirectory-to-s3-compatible-bucket/402

Пока предпринимаются попытки решения

  1. rewrite

    переписать ^ / security-now /(.*) $ схема: //s3.us-west-1.wasabisys.com/bits-podcasts/security-now/$1;

  2. return

    схема возврата 302 $: //s3.us-west-1.wasabisys.com/bits-podcasts/security-now/$1;

  3. proxy_pass

    proxy_set_header Host s3.us-west-1.wasabisys.com;схема proxy_pass $: //s3.us-west-1.wasabisys.com/bits-podcasts/security-now/$1;

1 Ответ

0 голосов
/ 30 ноября 2018

Вы не можете использовать rewrite для междоменных перенаправлений, в этом случае вы должны использовать proxy_pass, например:

    location ~ ^/directory1/(.*) {
        proxy_set_header Host s3.us-west-1.wasabisys.com;
        proxy_pass $scheme://s3.us-west-1.wasabisys.com/target-bucket/security-now/$1;
    }

Обратите внимание, что если вы указываете свой сервер вместо имени доменаили IP-адрес, вам потребуется указать дополнительный параметр resolver в вашем server блоке конфигурации, например:

server {
    ...
    resolver 8.8.8.8;
    ...
}

Update.

Кажется, я ошибся, заявив, что вы не можете использовать rewrite для междоменных перенаправлений.Можно, но в этом случае ваш пользователь получил перенаправление HTTP 301 вместо «прозрачной» доставки контента.Может быть, вы получили ошибку 404, потому что пропустили знак $ перед переменной scheme?

...