Nginx
nginx 代理由 minio 服務託管的 S3 公共儲存桶
我正在嘗試做我認為是世界上最簡單的代理指令,代理公共 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 端失敗。