自建对象存储服务minio在使用nginx进行反向代理时出现对象无法正常共享的解决办法

本文介绍了在使用minio并结合nginx做反向代理时,遇到对象无法正常共享的问题。问题源于签名校验失败,原因是nginx在转发请求时未正确处理HTTP Header中的Host字段。解决方案是在nginx配置中添加特定指令,确保Host信息被正确传递给minio服务器。
摘要由CSDN通过智能技术生成

什么是minio

Minio是在Apache License v2.0下发布的对象存储服务器。它与Amazon S3云存储服务兼容。它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/VM镜像等。对象的大小可以从几KB到最大5TB。

docker 安装示例

docker run -p 9000:9000 --name minio1   -e "MINIO_ACCESS_KEY=自己的access_key,相当于用户名"   -e "MINIO_SECRET_KEY=自己的secret_key,相当于密码"   -v /mnt/minio-data-v1:/data   -v /mnt/minio-v1:/root/.minio  -d  minio/minio:RELEASE.2018-07-31T02-11-47Z server /data

使用nginx进行反向代理

因为服务器有其他服务,并且使用的nginx作为反向代理,初始配置如下:
在/etc/nginx/conf.d下新建文件minio.conf

server {
    listen 80;
    gzip on;
    server_name oss.allocmem.com;
    location / {
      proxy_pass http://127.0.0.1:9000;
    }
}

nginx -s relaod让nginx重新加载

出现问题

在使用上面配置的用户名和密码进入主页后,上传了自己的文件,当点击生成共享连接的时候,如下图:

访问这个共享连接会报错SignatureDoesNotMatch:

原因及解决方案

错误提示SignatureDoesNotMatch签名不正确,后来发现和nginx反向代理在做转发的时候所携带的header有关系.minio在校验signature是否有效的时候,必须从http header里面获取host,而我们这里没有对header作必要的处理.如果源请求未携带这个头,则minio处无法获取请求头中的host,目前我这里测试看请求有携带Host,这里的机制问题出在nginx,nginx没有把这个host转发过去,而用ip的时候Host为 ip:port,这种情况是正常的,这应该和nginx的默认配置proxy_set_header Host $http_host有关系

如果不想改变请求头“Host”的值,可以这样来设置:
proxy_set_header Host httphost;<

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值