Я пытаюсь сделать то, что, как мне показалось, было самой простой прокси-директивой в мире, проксировать публичную корзину 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).
Я знаю, что делаю что-то очень простое, очень неправильно Я просто не могу понять это.
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;
}
}
, По-видимому, упорядочивание имеет значение несколько.
I была аналогичная проблема. Исправлением для меня было удаление косой черты (/) в строке proxy_pass.
ИЗМЕНИТЬ
proxy_pass https://minio/bucket/;
НА
proxy_pass https://minio/bucket;
Я думаю, это связано с тем, что URL-адрес запроса, соответствующий вашему блоку местоположения, включает косая черта (/). Таким образом, вы проксируете https://minio/bucket//что-то, что не удастся на стороне S3.