Minio + Nginx 实现静态资源对外访问
公司交付项目,文件服务java + minio实现文件基本功能。其中包含文件上传与下载与在线预览,由于文件下载功能实现方式问题(web直接调用文件预览接口,有minio直接返回可预览路径二次请求实现文件下载)。
在公司局域网内没有问题,到客户环境文件无法下载,客户环境文件上传直接同网段局域网内部通讯没有问题,但是下载请求为公网,又不想打破网关内内网通讯,静态低敏访问直接开启对外访问权限的业务逻辑,所以,解决问题的方式只有一个,就是下载功能返回的路径必须是公网可以正常访问。
剖析问题:
代理实现,配合dmz区 (这里用的是nginx)代理直接将请求转发一下就可以了,思路是对的,但是请求穿透到minio服务器后访问被拒绝,验证密钥失败。
密钥?校验失败?要解决这个问题就要先了解minio加密与校验的环节,没有必要非的知道minio的加密手段,校验失败肯定就是在校验前,提供的校验参数与加密时不一致,问题出在哪里了呢?在转发前是没有问题的啊,转发之后可以访问了,但是校验不通过,那一定就是转发环节出了问题,结合以上分析,去minio找了
官方文档
,按照官方配置还是不可以。
肯定是参与加密的参数不满足呀!
解决问题:
minio:
policyExpire: 300
accessKeyId: 123456
accessKeySecret: 123456
endpoint: http://127.0.0.1:9199
# 可以公网访问的域名,将minio返回的 ip 和端口直接替换就可以访问了
web_endpoint: https://demo.chenyb-sec.com
bucketName: oss-chenyb
# km 最大支持 5g
maxSize: 50
server {
listen 80;
listen 443 ssl;
server_name https://demo.chenyb-sec.com;
#选配 优化属性
ignore_invalid_headers off;
client_max_body_size 1000m;
proxy_buffering off;
#必须 防止请求头丢失
underscores_in_headers on;
#选配 优化属性
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Pragma "no-cache";
#选配 优化属性
# 针对缺失"X-Content-Type-Options"头漏洞整改建议
add_header X-Content-Type-Options nosniff; #影响demo服务登出等功能
# 针对缺失"X-XSS-Protection"头漏洞整改建议
add_header X-XSS-Protection "1; mode=block";
# 针对点击劫持:X-Frame-Options头缺失漏洞的整改建议
#add_header X-Frame-Options "SAMEORIGIN";
# 针对缺少HTTP Strict-Transport-Security头漏洞的整改建议
add_header Strict-Transport-Security "max-age=31536000;includeSubdomains;";
#必须 minio 转发路由
# 路由与minio.oss.bucketName 保持一致
location /oss-chenyb/ {
# minio.oss.endpoint 参数,参与签名(服务直连地址)
proxy_set_header X-Real-IP 127.0.0.1:9199;
# minio.oss.endpoint 参数,参与签名(服务直连地址)
proxy_set_header Host 127.0.0.1:9199;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
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;
# minio 服务直连地址
proxy_pass http://127.0.0.1:9199;
- 注意两个配置文件呼应关系即可
- web_endpoint:可以请求到nginx的域名
- bucketName:最好是nginx路由规则
- endpoint:能请求到minio的通讯地址,与proxy_pass、proxy_set_header Host、proxy_set_header X-Real-IP保持一致,因为要参与校验
由于文件下载功能实现方式问题(web直接调用文件预览接口,有minio直接返回可预览路径二次请求实现文件下载)。 在公司局域网内没有问题,到客户环境文件无法下载,客户环境文件上传直接同网段局域网内部通讯没有问题,但是下载请求为公网,又不想打破网关内内网通讯,静态低敏访问直接开启对外访问权限的业务逻辑,所以,解决问题的方式只有一个,就是下载功能返回的路径必须是公网可以正常访问。......
Minio
我挂载的Minio保存路径在宿主机为 /usr/local/minio/data,其下有一个目录 image(也是Minio的bucket),用于存放图片。
参考文章1中的运行容器方式②,如果失败,则可能是因为SELinux未关闭,进行关闭即可。
Minio只用于存储图片,不使用Minio的链接来访问图片。
Nginx
在参考文章2的基
Minio+Nginx+Https访问
最近感觉OSS比较有意思,然后发现网上有一款开源的软件Minio,算是OSS技术的的开源实现吧,最近玩了一下。想搞一下Https访问,但是Minio官方文档里面实在没看太懂,就想曲线救国,用Nginx转发一下,本次记录做法和期间遇到的问题。
Nginx 1.16.1
Minio RELEASE.2021-01-08T21:18:21Z
Java 1.8u255
Https 腾讯云申请的ssl证书
Minio Java客户端版本:
<depende
很多时候,我们的
minio文件
服务器并不会直接开放端口给外网
访问,那么外网又需要
访问的话,就需要用到
nginx或者其他web
服务器来进行转发了。
官网给出的文档:https://docs.min.io/cn/setup-
nginx-proxy-with-
minio.html
这里我们使用
nginx来进行转发,配置如下:
曾几何时,之前说的搭建分布式文件存储系统,好像唯一的选择就是 fastDfs,慢慢的发现好像周围的团队和项目都在选择Minio,进入了视野。
Minio与Amazon S3云存储服务兼容,采用Golang实现,服务端支持Windows、Linux、 OS X和FreeBSD等操作系统;客户端支持Java、Python、Javacript、 Golang语言,下面会有基于java的sdk的相关集成和操作。
Minio是Apache License v2.0下发布的对象存储服务器。它与Amazon S3云
Java报错笔记-org.springframework.data.redis.serializer.SerializationException: Could not read JSON
17707