Minio nginx配置https和http问题解决,疑难症全网首发

文章详细描述了在使用NGINX作为代理时遇到的三种AccessDenied错误,包括API错误和预览文件错误。解决方案涉及调整NGINX配置,如关闭缓存、正确设置Host头、处理验签问题,以及确保域名和端口的一致性。提供了解决这些问题的具体nginx配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进入下面小程序可以体验效果

 

以下问题基本上是因为NGINX代理出现

一、API直接返回单独的错误: io.minio.errors.ErrorResponseException: Access denied

二、API直接返回的错误:The request signature we calculated does not match the si

三、预览文件或者图片返回错误

<Error>
<Code>AccessDenied</Code>
<Key>1672887375909191680.png</Key>
<BucketName>9269770290188565a62b37a563d10a5a</BucketName>
<Resource>/9269770290188565a62b37a563d10a5a/1672887375909191680.png</Resource>
<RequestId>176BDD0C470B0828</RequestId>
<HostId>dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8</HostId>
</Error>

以上三个问题都属于Access denied 这个情况,但是原因却各有不同,解决方案也不一样。无论是国内还是国外解决方案都很贫瘠。所以经过我两天的踩坑已经解决问题

这些问题都是只有在使用nginx代理情况下才会出现,如果正常使用ip是不会有问题的,但是直接用ip的话,难免暴露出一些问题和不专业。

问题一的原因及解决方案

出现这个的原因大多数情况下,确实与服务器时间是否一致有关,但是不是所有都是。

部分是由于调用了minioClient.bucketExists(); 这个API则引起异常问题

1.评论区也有大佬指出解决方式:

nginx开启了缓存,增加这配置就可以了 proxy_cache_convert_head off

2.其他解决方式:

只要不调用判断是否存在桶api即可,改成获取所有桶,然后遍历判断

如果第一个方式能解决,那么就不需要第二个方式了

问题二的原因及解决方案

出现该问题主要是因为api请求验签不通过,因为验签在nginx转发时将host和port是否有携带。

解决方案:

client连接接口分为两种,域名和端口

例如:http://oss.baidu.com,http://oss.baidu.com:6661

nginx 配置时需要区分这两种方式:

proxy_set_header Host $http_host;  #域名形式配置,例如:http://oss.baidu.com (后缀没有斜杠)

proxy_set_header Host $host:$server_port; #例如: http://oss.baidu.com:6661

完整示例:

9000端口就是data接口(例如上传和客户端连接),9001是minio控制台端口

server {
        listen 80;
        server_name oss.baidu.com;
		
		location / {
			proxy_set_header Authorization $http_authorization;
			proxy_set_header Host $http_host;
			proxy_pass http:/127.0.0.1:9000;
			proxy_set_header  X-Real-IP    $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
		}
	}

https 配置也同理。其实只需要http用于上传,https用于文件预览或下载即可,示例

只要是同一个域名或域名与端口即可

预览地址:https://oss.baidu.com/storage/桶名/文件名.png?xxxx

storage 是定义的上下文

	server {
		listen 443 ssl http2;
        server_name oss.baidu.com;
		gzip on;
		ssl_certificate    fullchain.pem;
		ssl_certificate_key    privkey.pem;
		ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
		ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
		ssl_prefer_server_ciphers on;
		ssl_session_cache shared:SSL:10m;
		ssl_session_timeout 10m;
		add_header Strict-Transport-Security "max-age=31536000";
		
		location ^~/storage/ {
			proxy_buffering off;
		    proxy_set_header Host $http_host;
			rewrite ^/storage/(.*)$ /$1 break;
			proxy_pass http://127.0.0.1:9000;
			proxy_set_header  X-Real-IP    $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
		}
		
	}

问题三的原因以及解决办法

这个问题就解决方式非常简单

1.域名域名:端口,必须要完全统一,否则会因为host不同签名不通过

2.9000端口(minio默认端口)上传,也必须要9000端口查看或下载。9001不得使用

3.根据我上述的nginx配置就可以解决以问题二和问题三。

### 配置 Nginx 以配合 MinIO 使用 #### 安装 Nginx MinIO 为了使 Nginx 能够作为 MinIO 的前端代理工作,在安装阶段需先完成两者各自的部署。对于 Nginx 来说,编译并安装完成后应切换至 `/usr/local/nginx` 目录以便进一步操作[^1]。 #### 获取本地 IP 地址用于配置 在准备配置文件前,获取当前机器的 IP 地址是必要的步骤之一,这可以通过执行 `ifconfig` 命令来达成。该地址将被用来指定 Nginx 对外服务时所使用的 IP 地址,例如 `192.168.186.77` 可能会成为实际应用中的一个实例[^2]。 #### 创建存储桶并与外部路径关联 当 MinIO 已经成功启动并且可以正常登录后,可以在其中创建特定名称的存储桶(bucket),比如命名为 `blog` 的存储桶将会映射到 MinIO 内部的一个同名文件夹下。一旦完成了这样的设置,任何位于此 bucket 下的对象都可以通过类似于 `http://localhost:8081/blog/testpath/test.png` 这样的 URL 访问到了[^3]。 #### 编辑 Nginx 配置文件支持 MinIO 请求转发 为了让 Nginx 正确处理来自客户端对 MinIO 数据库对象的请求,需要编辑其配置文件加入如下所示的部分: ```nginx server { listen 80; server_name localhost; location /minio/ { proxy_pass http://127.0.0.1:9000; # MinIO 默认监听端口 proxy_set_header Host $host; 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; } } ``` 这段配置使得所有指向 `/minio/*` 的 HTTP 请求都会被重定向给运行在同一台主机上的 MinIO 服务器,并且保留了原始请求的一些重要头部信息以供后续认证机制使用。 然而,在某些情况下可能会遇到由于安全策略导致的访问权限问题,即尽管已经设置了上述代理规则但仍无法顺利存取数据的情况发生。此时应当检查 MinIO 的安全性设定以及确认所提供的 API 密钥是否有效无误[^5]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Garc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值