什么是MINIO
Minio是在A(yíng)pache License v2.0下發(fā)布的對(duì)象存儲(chǔ)服務(wù)器。它與Amazon S3云存儲(chǔ)服務(wù)兼容。它最適合存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù),如照片,視頻,日志文件,備份和容器/VM鏡像等。對(duì)象的大小可以從幾KB到最大5TB。
DOCKER 安裝示例
docker run-p9000:9000--name minio1-e"MINIO_ACCESS_KEY=自己的access_key,相當(dāng)于用戶(hù)名"-e"MINIO_SECRET_KEY=自己的secret_key,相當(dāng)于密碼"-v/mnt/minio-data-v1:/data-v/mnt/minio-v1:/root/.minio-dminio/minio:RELEASE.2018-07-31T02-11-47Z server /data
1
使用NGINX進(jìn)行反向代理
因?yàn)榉?wù)器有其他服務(wù),并且使用的nginx作為反向代理,初始配置如下:
在/etc/nginx/conf.d下新建文件minio.conf
server{? ? listen80;? ? gzip on;? ? server_name oss.allocmem.com;? ? location / {? ? ? proxy_pass http://127.0.0.1:9000;}}
1
2
3
4
5
6
7
8
9
nginx -s relaod讓nginx重新加載
出現(xiàn)問(wèn)題
在使用上面配置的用戶(hù)名和密碼進(jìn)入主頁(yè)后,上傳了自己的文件,當(dāng)點(diǎn)擊生成共享連接的時(shí)候,如下圖:
訪(fǎng)問(wèn)這個(gè)共享連接會(huì)報(bào)錯(cuò)SignatureDoesNotMatch:
原因及解決方案
錯(cuò)誤提示SignatureDoesNotMatch簽名不正確,后來(lái)發(fā)現(xiàn)和nginx反向代理在做轉(zhuǎn)發(fā)的時(shí)候所攜帶的header有關(guān)系.minio在校驗(yàn)signature是否有效的時(shí)候,必須從http header里面獲取host,而我們這里沒(méi)有對(duì)header作必要的處理.如果源請(qǐng)求未攜帶這個(gè)頭,則minio處無(wú)法獲取請(qǐng)求頭中的host,目前我這里測(cè)試看請(qǐng)求有攜帶Host,這里的機(jī)制問(wèn)題出在nginx,nginx沒(méi)有把這個(gè)host轉(zhuǎn)發(fā)過(guò)去,而用ip的時(shí)候Host為 ip:port,這種情況是正常的,這應(yīng)該和nginx的默認(rèn)配置proxy_set_header Host $http_host有關(guān)系
如果不想改變請(qǐng)求頭“Host”的值,可以這樣來(lái)設(shè)置:
proxy_set_header Host?httphost;但是,如果客戶(hù)端請(qǐng)求頭中沒(méi)有攜帶這個(gè)頭部,那么傳遞到后端服務(wù)器的請(qǐng)求也不含這個(gè)頭部。這種情況下,更好的方式是使用httphost;但是,如果客戶(hù)端請(qǐng)求頭中沒(méi)有攜帶這個(gè)頭部,那么傳遞到后端服務(wù)器的請(qǐng)求也不含這個(gè)頭部。這種情況下,更好的方式是使用host變量——它的值在請(qǐng)求包含“Host”請(qǐng)求頭時(shí)為“Host”字段的值,在請(qǐng)求未攜帶“Host”請(qǐng)求頭時(shí)為虛擬主機(jī)的主域名:
我們這里的minio.conf需要添加下面代碼
proxy_set_header Host$host;
1
$host代表的是當(dāng)前虛擬主機(jī)的host,即上面配置的oss.allcmem.com.完整示例如下:
server{listen80;gzipon;server_nameoss.allocmem.com;location/ {proxy_passhttp://127.0.0.1:9000;proxy_set_headerHost$host;? ? }}