Minio 对象存储服务无法访问

问题描述

  • 使用 Minio 服务,并且使用 ngxin 进行代理,生成的 URL 无法访问,报错 SignatureDoesNotMatch, 如下图所示:

nginx 的配置

    location /files/ {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
      chunked_transfer_encoding off;
      proxy_redirect off;
      proxy_pass http://minio/;
}

原因及解决方案:

  • SignatureDoesNotMatch 提示签名不正确。
  • minio 服务在校验 signature 是否有效的时候,会从 http header 里面获取 host,而在 nginx 里面没有配置 host,导致 minio 取不到这个值。
  • 因此在 nginx 里面增加这一行 proxy_set_header Host $host。
  • host 是发送请求里面的 header,需要注意的时候,如果 minio 服务是启动在 docker 里面,host 很可能是 “minio:9000″【docker 服务名字:对外暴露的 ip】,因此需要添加的是 proxy_set_header Host “minio:9000″。
  • 总之 $host 应该是 minio 生成的链接的 host。
  • 完整示例如下:
location /files/ {
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
  proxy_set_header Host "minio:9000";
  chunked_transfer_encoding off;
  proxy_redirect off;
  proxy_pass http://minio/;
}
Posted in 其他 and tagged , .

花若盛開,蝴蝶自來. 分享学习,每天进步一点点

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.