带有Nginx和预签名URL的Minio

u1ehiz5o  于 2022-11-28  发布在  Nginx
关注(0)|答案(1)|浏览(787)

有没有可能不在nginx的默认路径上运行MinIO?
我有一个后端,它使用以下代码生成预签名URL:

MinioClient minioClient = new MinioClient("http://x.x.x.x:9000", "key", "key");
String url = minioClient.presignedGetObject("bucket", "name", 60 * 60 * 24);

其中http://x.x.x.x: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

这个链接工作在VPN的预期,但当我重写的网址为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;
    }

问题是当我重写url时,它使签名无效。可能如果我在https://example.com/minio中运行minio,然后使用此链接作为端点来生成预先签名的url,我就不会有签名问题。

yeotifhr

yeotifhr1#

Minio使用主机进行签名,因此当主机更改时(x.x.x.x:9000到example.com),签名的URL将无效。

proxy_set_header Host 'x.x.x.x:9000';

Kubernetes的入口也是类似的。

相关问题