nginx проксирует публичный бакет S3, размещенный службой minio

Я пытаюсь сделать то, что, как мне показалось, было самой простой прокси-директивой в мире, проксировать публичную корзину S3.

Это моя конфигурация:

server {
    listen 80;
    listen [::]:80;

    server_name experiment.local;
    location /404.html {
      proxy_pass https://minio/bucket/404.html;
    }
    location / {
      error_page 404 = /404.html;
      proxy_pass https://minio/bucket/;
    }
}

Что на самом деле происходит при получении страница, которая не существует в корзине, я получаю что-то вроде этого от nginx:

<Error>
  <Code>NoSuchKey</Code>
  <Message>The specified key does not exist.</Message>
  <Key>index.html1</Key>
  <BucketName>visar</BucketName>
  <Resource>/bucket/index.html1</Resource>
  <RequestId>SCRUBBED</RequestId>
  <HostId>SCRUBBED</HostId>
</Error>

Я пробовал разные варианты этого, но всегда получаю похожие результаты. nginx правильно пересылает код возврата HTTP, поэтому я получаю 404 (изначально я получил 200 с моим однострочным proxy_pass).

Я знаю, что делаю что-то очень простое, очень неправильно Я просто не могу понять это.

0
задан 7 October 2019 в 07:39
2 ответа
server {


    listen 80;
    listen [::]:80;

    server_name experiment.local;
    location /404.html {
      proxy_pass https://minio/bucket/404.html;
    }
    location / {
      proxy_pass https://minio/bucket/;
      proxy_intercept_errors on;
      error_page 404 = /404.html;
    }

}

, По-видимому, упорядочивание имеет значение несколько.

0
ответ дан 23 November 2019 в 04:16

I была аналогичная проблема. Исправлением для меня было удаление косой черты (/) в строке proxy_pass.

ИЗМЕНИТЬ

proxy_pass https://minio/bucket/;

НА

proxy_pass https://minio/bucket;

Я думаю, это связано с тем, что URL-адрес запроса, соответствующий вашему блоку местоположения, включает косая черта (/). Таким образом, вы проксируете https://minio/bucket//что-то, что не удастся на стороне S3.

0
ответ дан 30 September 2020 в 08:59

Теги

Похожие вопросы