ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

使用Nginx代理MinIO的完整指南:实现Web界面与API接口的远程访问

使用Nginx代理MinIO的完整指南:实现Web界面与API接口的远程访问 一、什么是Minio1.1、简介Minio是一个高性能的对象存储服务器用于构建云存储解决方案。它使用GoLang编写专为私有云、公有云和混合云环境设计。它兼容Amazon S3 API并可以作为一个独立的存储后端或与其他流行的开源解决方案如Kubernetes集成。1.2、MinIO的核心特点存储非结构化数据视频、文件、图片等以对象形式相比传统文件系统如NFS和块存储如ISCSI更易于扩展和管理提供简单的部署选项和只管的Web界面支持快速设置和访问存储资源更多有关minio的详细介绍可参考minio官方网站。二、为什么需要Nginx代理MinIO本教程主要用来介绍使用Nginx代理minio。为什么会出一期使用Nginx代理minio这个流程呢作者键盘侠Gu在实际的部署项目遇到了minio和后端服务都部署在内网环境下但是需要在外网环境下进行访问部署而且服务器是Linux环境没有图形化界面虽然也能够对minio的桶以及密钥进行配置但是相对来说比较繁琐。因此想到了能否使用Nginx将minio的Web界面地址及Api接口地址进行代理出来在网上也检索了一些方法要么笼统发布要么给的方法不行。经过反复研究最终成功实现了Nginx代理minio的图形化Web界面及Api接口。三、完整代理配置方案3.1 基础环境准备已安装MinIO并正常运行默认Web端口9001API端口9000已安装Nginx。3.2 Nginx配置详解server { listen 8083; server_name localhost; # api接口 location /minio-api/ { proxy_pass http://192.168.0.25:9000/; proxy_http_version 1.1; proxy_set_header Host $host; 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_buffering off; tcp_nodelay on; } #web界面 location /minio-web/ { rewrite ^/minio-web/(.*) /$1 break; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-NginX-Proxy true; #real_ip_header X-Real-IP; proxy_connect_timeout 300; # 支持WebSocket2023年1月后MinIO版本需要 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; chunked_transfer_encoding off; proxy_pass http://192.168.0.25:9001/; sub_filter base href// base href/minio-web//; } }需要注意的是代理Web界面时如果出现图片加载不出来的情况下必须要配置“sub_filter”。3.3 关键配置说明1 路径处理API接口通过/minio-api/前缀代理到API端口9000Web界面通过/minio-web/前缀代理到MinIO的Web端口9001。2 WebSocket支持新版MinIO需要WebSocket连接必须配置Upgrade和COnnection头。3 静态资源修正使用sub_filter修正HTML种的基础路径确保资源加载正确。四、常见问题及解决方案4.1 sub_filter无法工作unknown directive sub_filter原因分析模块未加载sub_filter功能需要ngx_http_sub_module模块支持可能在编译时未包含此模块配置语法变化新版本可能对语法有细微调整与其他模块冲突某些过滤类模块可能优先级冲突解决方案方法1重新编译Nginx包含sub模块# 检查当前Nginx是否包含sub模块 nginx -V 21 | grep -o http_sub_module # 重新编译在Nginx源码目录 ./configure --with-http_sub_module make sudo make install方法2安装扩展版本快速解决对于Ubuntu/Debiansudo apt-get install nginx-extras对于CentOS/RHELsudo yum install nginx-plus-module-subs-filter验证配置nginx -t nginx -s reload4.2 图片/静态资源加载失败确保sub_filter配置正确检查路径重写规则确认代理头信息完整。4.3 WebSocket连接问题确认已配置Upgrade和Connection头检查防火墙设置验证Nginx版本支持WebSocket代理。4.4 上传、下载等访问地址以Java为例如果Java服务和minio在同一个网段下那么上传文件时配置的是内网地址因为在上传时是Java服务在内网中调用的minio不需要配置外网代理地址但是如果不在同一个网段那么就需要配置代理地址来进行上传了在下载的时候如果是外网的话那么就必须要使用代理的api地址进行访问否则请求不到。五、最佳实践建议安全加固为代理路径添加HTTP Basic认证配置SSL/TLS加密限制访问IP范围性能优化启用gzip压缩调整缓冲区大小配置合理的超时时间路径设计原则保持API和Web路径前缀一致如都使用/minio/路径结尾的/必须正确配置避免路径冲突混合环境配置后端服务直接使用MinIO原始地址内网通信前端使用代理地址外网访问预览地址统一使用代理地址六、总结通过Nginx代理MinIO可以有效解决内外网访问问题同时提供更好的安全性和可管理性。关键点在于在配置是web界面可以直接通过代理的地址进行访问Api接口如果我们配置的后端服务可以直接与minio建立通信那么就我们在配置OSS上传时api地址需要配置代理之前的地址也就是原地址而我们的预览地址需要配置代理之后的地址否则会导致不可以预览。在配置location时我们需要注意的是请求前缀的前面和后面都必须要加上“/”否则会导致代理失败。这种方案特别适合无GUI的Linux服务器环境可以显著简化MinIO的管理和维护工作。
返回列表