介绍:
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
下载:
官网下载:https://docs.min.io/cn/minio-quickstart-guide.html (神卡)
本站下载:MinIO window 服务端和客户端(mc)&linux服务器端
部署(以centos为例):
将下载文件上传服务器,使用如下命令启动:
/opt/minio server /var/upload
启动会提示修改默认用户名和密码(默认为:minioadmin/minioadmin)
启动后使用 curl localhost:9000 查看 如果返回html服务启动成功
nginx集成:
添加如下配置:
server {
listen 80;
server_name example.com;#改成你自己的
# To allow special characters in headers
ignore_invalid_headers off;
# Allow any size file to be uploaded.
# Set to a value such as 1000m; to restrict file size to a specific value
client_max_body_size 0;
# To disable buffering
proxy_buffering off;
location / {
#这几个头设置很重要丢失了会报错,见后面坑分析
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;
proxy_set_header Host $http_host;
proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://localhost:9000; #改成你自己的
}
}
如果使用分享连接功能可以添加如下配置:
location /photos/ {
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;
proxy_set_header Host $http_host;
proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://localhost:9000;
}
坑:
1、使用 mc config host add damon_server http://your.fileserver.address Damon *** AWS15 --api s3v4
报错:The request signature we calculated does not match the signature you provided.
原因:nginx代理没有设置 proxy_set_header 导致头信息丢失,参考上述配置修改
临时方案 ,使用 mc config host add damon_server http://your.fileserver.address Damon *** AWS15 --api s3v2
连接,因为签名 s3v4 是严格模式 ,s3v2 不是
2、生成分享连接报错 The request signature we calculated does not match the signature you provided.
原因1:同上
原因2:生成分享连接连接服务器时使用的服务器地址和分享链接不一致(minio会校验连接host)
比如,小编文件服务起和应用服务器在同一台主机,于是使用如下代码(python)生成连接
def makeShareUrl(fileName):
try:
minioClient = Minio('localhost:9000',
access_key='you guess',
secret_key='you guess',
secure=False)
return minioClient.presigned_get_object('resource', fileName, expires=timedelta(hours=6))
except Exception as e:
print(str(e))
return None
然后将地址改成外网地址,一直报错
应该在连接也是用外网地址,如下:
def makeShareUrl(fileName):
try:
minioClient = Minio('yy123.ink',
access_key='you guess',
secret_key='you guess',
secure=False)
return minioClient.presigned_get_object('resource', fileName, expires=timedelta(hours=6))
except Exception as e:
print(str(e))
return None
3、配置文件位置