進(jìn)入下面小程序可以體驗(yàn)效果:
?
以下問(wèn)題基本上是因?yàn)镹GINX代理出現(xiàn)
一、API直接返回單獨(dú)的錯(cuò)誤: io.minio.errors.ErrorResponseException: Access denied
二、API直接返回的錯(cuò)誤:The request signature we calculated does not match the si
三、預(yù)覽文件或者圖片返回錯(cuò)誤
<Error>
<Code>AccessDenied</Code>
<Key>1672887375909191680.png</Key>
<BucketName>9269770290188565a62b37a563d10a5a</BucketName>
<Resource>/9269770290188565a62b37a563d10a5a/1672887375909191680.png</Resource>
<RequestId>176BDD0C470B0828</RequestId>
<HostId>dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8</HostId>
</Error>
以上三個(gè)問(wèn)題都屬于Access denied 這個(gè)情況,但是原因卻各有不同,解決方案也不一樣。無(wú)論是國(guó)內(nèi)還是國(guó)外解決方案都很貧瘠。所以經(jīng)過(guò)我兩天的踩坑已經(jīng)解決問(wèn)題
這些問(wèn)題都是只有在使用nginx代理情況下才會(huì)出現(xiàn),如果正常使用ip是不會(huì)有問(wèn)題的,但是直接用ip的話,難免暴露出一些問(wèn)題和不專(zhuān)業(yè)。
問(wèn)題一的原因及解決方案
出現(xiàn)這個(gè)的原因大多數(shù)情況下,確實(shí)與服務(wù)器時(shí)間是否一致有關(guān),但是不是所有都是。
部分是由于調(diào)用了minioClient.bucketExists(); 這個(gè)API則引起異常問(wèn)題。
1.評(píng)論區(qū)也有大佬指出解決方式:
nginx開(kāi)啟了緩存,增加這配置就可以了 proxy_cache_convert_head off
2.其他解決方式:
只要不調(diào)用判斷是否存在桶api即可,改成獲取所有桶,然后遍歷判斷
如果第一個(gè)方式能解決,那么就不需要第二個(gè)方式了
問(wèn)題二的原因及解決方案
出現(xiàn)該問(wèn)題主要是因?yàn)閍pi請(qǐng)求驗(yàn)簽不通過(guò),因?yàn)轵?yàn)簽在nginx轉(zhuǎn)發(fā)時(shí)將host和port是否有攜帶。
解決方案:
client連接接口分為兩種,域名和端口
例如:http://oss.baidu.com,http://oss.baidu.com:6661
nginx 配置時(shí)需要區(qū)分這兩種方式:
proxy_set_header Host $http_host;? #域名形式配置,例如:http://oss.baidu.com (后綴沒(méi)有斜杠)
proxy_set_header Host $host:$server_port; #例如:?http://oss.baidu.com:6661
完整示例:
9000端口就是data接口(例如上傳和客戶端連接),9001是minio控制臺(tái)端口
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 配置也同理。其實(shí)只需要http用于上傳,https用于文件預(yù)覽或下載即可,示例:
只要是同一個(gè)域名或域名與端口即可
預(yù)覽地址: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;
}
}
問(wèn)題三的原因以及解決辦法
這個(gè)問(wèn)題就解決方式非常簡(jiǎn)單
1.域名 或 域名:端口,必須要完全統(tǒng)一,否則會(huì)因?yàn)閔ost不同簽名不通過(guò)
2.9000端口(minio默認(rèn)端口)上傳,也必須要9000端口查看或下載。9001不得使用文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-538594.html
3.根據(jù)我上述的nginx配置就可以解決以問(wèn)題二和問(wèn)題三。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-538594.html
到了這里,關(guān)于Minio nginx配置https和http問(wèn)題解決,疑難癥全網(wǎng)首發(fā)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!