Nginx

nginx 代理由 minio 服務託管的 S3 公共儲存桶

  • September 30, 2020

我正在嘗試做我認為是世界上最簡單的代理指令,代理公共 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(最初我的單行 proxy_pass 得到了 200)。

我知道我在做一些非常基本的事情,真的是錯的,我就是不能把我的手指放在它上面。

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;
   }

}

顯然訂購有點重要。

我有一個類似的問題。對我來說,解決方法是刪除你的 proxy_pass 行上的斜杠( / )。

改變

proxy_pass https://minio/bucket/;

proxy_pass https://minio/bucket;

我相信這是因為與您的位置塊匹配的請求 URL 包含斜杠( / )。因此,您正在代理 https://minio/bucket//something 這將在 S3 端失敗。

引用自:https://serverfault.com/questions/987061