Nginx负载均衡配置Minio避免踩坑

前言

前面咱们介绍了Minio和Nginx

Minio负载均衡配置

直接上nginx.conf配置吧

upstream minio {
  ip_hash;
  server 192.168.124.241:9001;
  server 192.168.124.241:9002;
  server 192.168.124.241:9003;
  server 192.168.124.241:9004;
}
server {
  listen       9999;
  server_name  localhost;

  ignore_invalid_headers off;
  client_max_body_size 0;
  proxy_buffering off;

  location / {  
    # proxy_set_header   Host $http_host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-Host  $host:$server_port;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto  $http_x_forwarded_proto;
    client_body_buffer_size 10M;
    client_max_body_size 10G;
    proxy_buffers 1024 4k;
    proxy_read_timeout 300;
    proxy_next_upstream error timeout http_404;
    # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
    proxy_http_version 1.1;
    proxy_set_header Connection "";

    proxy_pass http://minio;
  }
}

细心的小伙伴可以发现,前面的Nginx总结中有上面的配置,哈哈

SignatureDoesNotMatch

开开心心地搞到最后了,本以为大功告成,却偏偏报错了(关键配置上面都注释了),emmmm…………

minIO Docker 使用Nginx代理后出现:

minio.error.SignatureDoesNotMatch: SignatureDoesNotMatch:The request signature we calculated does not match the signature you provided
Nginx负载均衡配置Minio避免踩坑

心态崩了.....使用可视化客户端上传删除什么都没有问题,偏偏使用API的时候报错了

查了一下发现是这样的:

签名不正确,后来发现和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;但是,如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。这种情况下,更好的方式是使用httphost;但是,如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。这种情况下,更好的方式是使用host变量——它的值在请求包含“Host”请求头时为“Host”字段的值,在请求未携带“Host”请求头时为虚拟主机的主域名:

我们这里的nginx.conf需要添加下面代码

proxy_set_header Host $host;

$host代表的是当前虚拟主机的host,即上面配置的oss.allcmem.com

配置了host后还是相同的错误.....

Nginx负载均衡配置Minio避免踩坑

查了一下,发现原来Nginx使用的默认连接方式是HTTP/1......

添加配置:

# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;

果然,上传文件没有问题了.终于解决了

更详细的配置大家参考官网:https://docs.min.io/docs/setup-nginx-proxy-with-minio.html

展开阅读全文

页面更新:2024-03-04

标签:大功告成   字段   注释   心地   变量   头部   前言   虚拟主机   客户端   细心   心态   关系   方式   发现   服务器   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top