龙空技术网

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

阿毛杂记 1260

前言:

今天我们对“nginx根据host转发”都比较重视,大家都想要了解一些“nginx根据host转发”的相关知识。那么小编在网摘上搜集了一些关于“nginx根据host转发””的相关资讯,希望你们能喜欢,各位老铁们一起来学习一下吧!

前言

前面咱们介绍了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 ;  }}

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

SignatureDoesNotMatch

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

minIO Docker 使用Nginx代理后出现:

minio.error.SignatureDoesNotMatch: SignatureDoesNotMatch:The request signature we calculated does not match the signature you provided

心态崩了.....使用可视化客户端上传删除什么都没有问题,偏偏使用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使用的默认连接方式是HTTP/1......

添加配置:

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

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

更详细的配置大家参考官网:

标签: #nginx根据host转发