Minio+Nginx+Https访问

那年烟雨落申城
• 阅读 265

缘起

最近感觉OSS比较有意思,然后发现网上有一款开源的软件Minio,算是OSS技术的的开源实现吧,最近玩了一下。想搞一下Https访问,但是Minio官方文档里面实在没看太懂,就想曲线救国,用Nginx转发一下,本次记录做法和期间遇到的问题。

版本

Nginx 1.16.1
Minio RELEASE.2021-01-08T21:18:21Z
Java 1.8u255
Https 腾讯云申请的ssl证书
Minio Java客户端版本:
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.0.3</version>
        </dependency>

Nginx配置

上传腾讯云申请的ssl证书文件到服务器,Nginx的话上传解压后的nginx文件夹下的1_xxx.key2_xxx.crt文件

server{
        listen 443 ssl;
        server_name xxx.com;
        ssl_certificate /home/certs/1_xxx.com.crt;
        ssl_certificate_key /home/certs/2_xxx.com.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        # 下面这个顺序不要颠倒
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
   location / {
            proxy_pass http://localhost:9000;
            # 下面这三个记得加上
            proxy_set_header  Host       $host;
            proxy_set_header  X-Real-IP    $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

上面配置了Nginx转发,重启Nginx后,https就生效了

Minio配置

下载minio二进制文件,在minio所在的文件夹执行:

./minio server /data

minio默认9000端口,记得不要占用这个端口 其它设置详细见minio文档

java客户端

封装Minio上传文件方法:

 @SneakyThrows        //lombok的注解
 public String uploadFile(InputStream inputStream, String bucket, String uploadFileName, String contentType,long size){
     MinioClient minioClient = MinioClient.builder()
             //endpoint是Minio的地址,443是ssl的端口,取决于上面Nginx配置的端口
             //true是开启ssl连接
             .endpoint(endPoint,443,true)
             .credentials(accessKey,accessSecret)
             .build();

     minioClient.putObject(PutObjectArgs.builder().bucket(bucket)
             .object(uploadFileName).stream(inputStream,size,-1).contentType(contentType).build());

     return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
             .bucket(bucket).object(uploadFileName).method(Method.GET).build());
 }

遇到错误:

request signature we calculated does not match the signature you provided. Check your key and signing method. 

是https签名问题,解决此问题的方法是:

  1. Nginx配置中添加(上面已经给出提示):
    proxy_set_header  Host       $host;
    proxy_set_header  X-Real-IP    $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
  2. Java客户端添加ssl支持
    MinioClient minioClient = MinioClient.builder()
                 //endpoint是Minio的地址,443是ssl的端口,取决于上面Nginx配置的端口
                 //true是开启ssl连接
                 .endpoint(endPoint,443,true)
                 .credentials(accessKey,accessSecret)
                 .build();
    至此,Minio借助Nginx实现Https访问
点赞
收藏
评论区
推荐文章
Karen110 Karen110
2年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Stella981 Stella981
2年前
Python Challenge Level 18
初学Python,挑战一下流行的PythonChallenge,很不幸,卡在了18关~~被字符字节码之间的转换搞得焦头烂额,不过终于搞定了还是很happy的~~~主要的问题就是16进制形式的字符如何转成字节码(注意:不是encoding)如:\'89','50','4e','47','0d','0a','1a','0a','00
Wesley13 Wesley13
2年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
2年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
Redis未授权访问漏洞复现学习
0x00前言前段时间看到想复现学习一下,然后就忘了越临近考试越不想复习!在这里插入图片描述(https://oscimg.oschina.net/oscnet/ec73a943a3d9e18184946ee4c4ca290e14f.jpg)常见的未授权访问漏洞Redis未授权访问漏洞MongoDB未授权访问漏
Stella981 Stella981
2年前
Hibernate纯sql查询结果和该sql在数据库直接查询结果不一致
问题:今天在做一个查询的时候发现一个问题,我先在数据库实现了我需要的sql,然后我在代码中代码:selectdistinctd.id,d.name,COALESCE(c.count_num,0),COALESCE(c.count_fix,0),COALESCE(c
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
芝士年糕 芝士年糕
1年前
windows安装minio
一、概述最近在学习使用minio,在这里对自己的学习过程做一个记录和总结,方便自己查阅。Minio是GlusterFS创始人之一AnandBabuPeriasamy发布新的开源项目。Minio兼容Amason的S3分布式对象存储项目,采用Golang实现,客户端支持Java、Python、Javacript、Golang语言。Minio可以做为云存储的