minio集群将一切访问都交给nginx

问题
一般在正式的环境下 , 通过给域名添加子路径(如oss)用于下载文件服务器上的文件 。但这种设置子路径的方式不能直接通过API上传文件 , 创建桶等 , 鉴于安全 , 也不能让这种子路径拥有创建、删除文件的权限 。所以 , 一般情况下 , 后台还是通过访问多个minio端口9000实现文件的操作 , 甚至有时 , 还需要在自己的代码中写一套负载均衡的逻辑(之前我的代码中就是这样实现的) 。其实完全可以基于Nginx直接暴露9001,9000, 同时再给web通过/oss/xx的形式访问的能力 。
结构设计

  • 实现API负载均衡 , 并可以直接通过nginx:9000商品操作文件服务器 。
  • 实现通过/oss/xx仅浏览某个指定的文件服务器上文件(必须是完整目录) 。
  • 图片服务器高可靠 。
  • 本次搭建使用bitnami/minio镜像 , 此镜像为官方认证的镜像 , 方便使用、集群方便 , 唯一就是不能通过传递--address,--console-address修改端口号 , 此镜像固定API端口为9000,console端口为9001 。好在 , 如果使用非host模式 , 可以此端口号映射成你想要的即可 。
 
minio集群将一切访问都交给nginx

文章插图
 
本次环境在一台主机上搭建:
主机
软件
网卡
【minio集群将一切访问都交给nginx】端口
192.168.56.61
bitnami/minio:2022.9.1
mybridge
不对外暴露
bitnami/minio:2022.9.1
mybridge
不对外暴露
bitnami/minio:2022.9.1
mybridge
不对外暴露
bitnami/minio:2022.9.1
mybridge
不对外暴露
nginx:1.23.1
mybridge
80,9000,9001
目录结构
在任意目录下 , 创建data{1..4}目录 , 用于保存minio的数据 。创建nginx用于添加nginx的配置文件 。在nginx1.19版本以后 , 可以通过映射 /etc/nginx/templats文件 , 将此目录下的xxx.conf.template文件自动的保存到nginx的配置文件下/etc/nginx/conf.d/ , nginx将 templates下的 *.conf.template文件保存到/etc/nginx/conf.d/目录下以后 , 会删除.template扩展名 。
目录截图:
minio集群将一切访问都交给nginx

文章插图
 
配置文件Docker-compose.yml
此配置文件 , 用于管理4个minio容器和一个nginx容器 。由于bitnami/minio在创建时 , 会自动创建mc client , 这会影响创建的速度 , 我们可以通过MINIO_SKIP_client将它关闭 。关闭后 , 如果需要使用此功能 , 可以进入容器自行设置 。
minio集群将一切访问都交给nginx

文章插图
 
minio集群将一切访问都交给nginx

文章插图
 
配置文件default.conf.template
此配置文件为oss映射配置文件 , 配置后 , web可以通过http://<或名>/oss/<桶名称>/1.png直接访问到到图片 , 但不能操作minio的文件系统 , 如上传、创建桶等 。
minio集群将一切访问都交给nginx

文章插图
 
配置文件minio_api.conf.template
此配置文件用于nginx影射9000端口 , 实现直接通过此端口创建桶、上传等 , 也用于其他client接口 。
minio集群将一切访问都交给nginx

文章插图
 
配置文件minio_console.conf.template
此配置文件 , 用于影射9001端口 , 实现console ui的相关操作 。
minio集群将一切访问都交给nginx


推荐阅读