使用Nginx代理MinIO的完整指南:实现Web界面与API接口的远程访问
2026/9/21 18:22:07 网站建设 项目流程

一、什么是Minio?

1.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端口9001,API端口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; # 支持WebSocket(2023年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端口(9000);
  • Web界面:通过/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 2>&1 | grep -o http_sub_module # 重新编译(在Nginx源码目录) ./configure --with-http_sub_module make sudo make install

方法2:安装扩展版本(快速解决)

  • 对于Ubuntu/Debian:
sudo apt-get install nginx-extras
  • 对于CentOS/RHEL:
sudo yum install nginx-plus-module-subs-filter

验证配置:

nginx -t nginx -s reload

4.2 图片/静态资源加载失败

  • 确保sub_filter配置正确;

  • 检查路径重写规则;

  • 确认代理头信息完整。

4.3 WebSocket连接问题

  • 确认已配置Upgrade和Connection头;
  • 检查防火墙设置;
  • 验证Nginx版本支持WebSocket代理。

4.4 上传、下载等访问地址

  • 以Java为例,如果Java服务和minio在同一个网段下,那么上传文件时配置的是内网地址,因为在上传时,是Java服务在内网中调用的minio,不需要配置外网代理地址;但是如果不在同一个网段,那么就需要配置代理地址来进行上传了;
  • 在下载的时候,如果是外网的话,那么就必须要使用代理的api地址进行访问,否则请求不到。

五、最佳实践建议

  1. 安全加固

    • 为代理路径添加HTTP Basic认证

    • 配置SSL/TLS加密

    • 限制访问IP范围

  2. 性能优化

    • 启用gzip压缩

    • 调整缓冲区大小

    • 配置合理的超时时间

  3. 路径设计原则

    • 保持API和Web路径前缀一致(如都使用/minio/

    • 路径结尾的/必须正确配置

    • 避免路径冲突

  4. 混合环境配置

    • 后端服务直接使用MinIO原始地址(内网通信)

    • 前端使用代理地址(外网访问)

    • 预览地址统一使用代理地址

六、总结

通过Nginx代理MinIO可以有效解决内外网访问问题,同时提供更好的安全性和可管理性。关键点在于:

  • 在配置是,web界面,可以直接通过代理的地址进行访问;
  • Api接口,如果我们配置的后端服务可以直接与minio建立通信,那么就我们在配置OSS上传时,api地址需要配置代理之前的地址,也就是原地址,而我们的预览地址,需要配置代理之后的地址,否则会导致不可以预览。
  • 在配置location时,我们需要注意的是,请求前缀的前面和后面都必须要加上“/”,否则会导致代理失败。

这种方案特别适合无GUI的Linux服务器环境,可以显著简化MinIO的管理和维护工作。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询