oig*_*gna 7 java nginx amazon-s3 minio
是否可以不在 nginx 的默认路径上运行 MinIO?
我有一个使用以下代码生成预签名网址的后端:
MinioClient minioClient = new MinioClient("http://x.x.x.x:9000", "key", "key");
String url = minioClient.presignedGetObject("bucket", "name", 60 * 60 * 24);
Run Code Online (Sandbox Code Playgroud)
其中http://xxxx:9000是本地 minio。
它返回:
http://x.x.x.x:9000/bucket/name?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20181122%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20181122T072255Z&X-Amz-Expires=184&X-Amz-SignedHeaders=host&X-Amz-Signature=460b9b46f5fac13f29de4372dd7c1e8d6d6c747510761695a40d6b9ff08ba7d8
Run Code Online (Sandbox Code Playgroud)
此链接按预期在 VPN 下工作,但是当我将 URL 重写为https://example.com/bucket/name? ... 为了到达所有用户我收到签名错误。
我有一个 nginx 作为反向代理,并且在默认位置有一个前端:
location / {
proxy_pass http://x.x.x.x:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /bucket/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://x.x.x.x:9000;
}
Run Code Online (Sandbox Code Playgroud)
问题是当我重写 url 时,它会使签名无效。也许如果我在https://example.com/minio中运行 minio ,然后使用此链接作为端点来生成预签名 url,我将不会遇到签名问题。
小智 1
Minio 使用主机进行签名,因此当主机更改(xxxx:9000 更改为 example.com)时,签名的 URL 将失效。尝试这个 -
proxy_set_header Host 'x.x.x.x:9000';
Run Code Online (Sandbox Code Playgroud)
我们在 Kubernetes 入口中使用类似的东西。