.NET 中使用 Minio 遇到的一些坑

本文总结了在 .NetCore 中使用 Minio 的过程中遇到的一些问题。

连接客户端时报错

在连接客户端时,报错:Minio.Exceptions.InvalidEndpointException: MinIO API responded with message=No path allowed in endpoint.

连接代码为:

1
MinioClient minioClient = new MinioClient("https://XXXX:9000",accessKey:"Q3AM3UQ867SPQQA43P2F",secretKey:"zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG").WithSSL();

解决方法:

把 url 的前缀 https:// 去掉即可。

签名验证失败

在使用 minioClient时,报错: MinIO API responded with message=The request signature we calculated does not match the signature you provided. Check your key and signing method.

解决办法:

出现这种问题的原因是 minio 在校验 signature 是否有效的时候,必须从 http header 里面获取 host,而我们这里没有对 header 作必要的处理。如果源请求未携带这个头,则 minio 处无法获取请求头中的 host。

可以在 nginx 中添加如下配置解决:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
location /
{
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_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass http://localhost:9000;
chunked_transfer_encoding off;
}

参考:

  1. http://www.dreamwu.com/post-2068.html

  2. https://docs.min.io/docs/setup-nginx-proxy-with-minio.html

  3. https://segmentfault.com/a/1190000019422246

访问bucket被拒绝

当调用 BucketExistsAsync("public") 时,报错:MinIO API responded with message=Access denied on the resource: public/.

解决办法: