问题背景
在1Panel中通过Docker部署MinIO后,使用Nginx反向代理访问时遇到以下问题:
访问域名后自动跳转到
http://127.0.0.1:9001
出现循环重定向错误
静态资源(CSS/JS)加载失败(404)
根本原因
1. MinIO Console跳转问题
MinIO Console默认使用它实际监听的地址(127.0.0.1:9001)来生成URL,而不是外部域名。
2. Nginx配置冲突
listen 80和listen 443同时存在时,HTTP到HTTPS的重定向配置不当会导致循环
静态资源location拦截了请求,没有代理到MinIO
解决方案
方案1:内网直连(推荐用于后端API)
后端直接连接MinIO内网地址,不走反向代理:
storage:
enabled: true
endpoint: "127.0.0.1:9000" # 内网直连
access_key: "key" # MINIO_ROOT_USER
secret_key: "secret" # MINIO_ROOT_PASSWORD
use_ssl: false # 内网不用HTTPS
bucket: "team"
public_base_url: "https://s3.example.com/team" # 对外暴露的URL方案2:分开两个域名(推荐用于生产环境)
Console域名Nginx配置(需要处理跳转):
server {
listen 80;
server_name minio-console.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name minio-console.example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass http://127.0.0.1:9001/;
proxy_set_header Host $http_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_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off; # 关闭重定向修改
}
}API域名Nginx配置(最简单,无跳转问题):
server {
listen 80;
server_name s3.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name s3.example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass http://127.0.0.1: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;
client_max_body_size 50M;
}
}方案3:重建MinIO容器(彻底解决跳转)
如果必须用一个域名访问Console,需要设置环境变量:
docker run -d \
--name minio \
-p 9000:9000 \
-p 9001:9001 \
-e MINIO_ROOT_USER=admin \
-e MINIO_ROOT_PASSWORD=password123 \
-e MINIO_BROWSER_REDIRECT_URL="https://minio.example.com/" \
-v /opt/minio/data:/data \
--restart always \
minio/minio server /data --console-address ":9001"关键环境变量:MINIO_BROWSER_REDIRECT_URL
避坑指南
1. 不要用1Panel默认的静态资源location
# 这个配置会拦截CSS/JS请求,导致MinIO Console页面加载失败
location ~ .*\.(js|css|png|jpg)... {
expires 30d;
...
}删除这个location块!
2. 不要同时存在多种重定向配置
不要在同一个server块中同时用
listen 80和listen 443
HTTP到HTTPS重定向应该放在单独的server块中
3. 后端配置要点
4. 必须创建bucket并设置公开访问
docker exec -it minio sh
mc alias set local http://localhost:9000 team secret
mc mb local/lover-team # 创建bucket
mc anonymous set download local/team # 设置公开访问
exit调试命令
# 检查MinIO容器状态
docker ps | grep minio
# 查看端口映射
docker port minio
# 本地测试API端口
curl -I http://127.0.0.1:9000
# 本地测试Console端口
curl -I http://127.0.0.1:9001
# 测试反向代理
curl -I https://s3.example.com/总结
后端推荐内网直连:
127.0.0.1:9000,不走反向代理,速度最快
Console单独一个域名:避免跳转问题
重建容器时设置
MINIO_BROWSER_REDIRECT_URL:根治跳转问题
删除静态资源location:避免CSS/JS加载失败