如何正确配置Nginx代理Docker部署的MinIO服务?
问题原因
浏览器报错的核心是WebSocket连接失败——MinIO控制台依赖WebSocket实现存储桶数据的实时同步,当前Nginx配置没有处理WebSocket的升级请求;另外MinIO未配置正确的外部访问URL,导致控制台内部请求指向了容器内部地址,而非反向代理后的公网地址。
修复步骤
1. 更新Nginx配置,添加WebSocket支持
在代理MinIO控制台(9001端口)的location /块中,补充WebSocket相关配置:
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name s3.mysite.com; ssl_certificate /etc/letsencrypt/live/s3.mysite.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/s3.mysite.com/privkey.pem; ignore_invalid_headers off; client_max_body_size 0; proxy_buffering off; # 代理存储桶请求到MinIO数据端口(9000) location /blog/ { 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_set_header Host $http_host; proxy_connect_timeout 300; proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://minio:9000; } # 代理控制台请求到MinIO控制台端口(9001),新增WebSocket支持 location / { 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_set_header Host $http_host; # 处理WebSocket升级 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 延长WebSocket连接超时时间 proxy_read_timeout 86400; proxy_connect_timeout 300; proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://minio:9001; } }
2. 配置MinIO外部访问URL
在你的config/.env.minio.prod文件中添加以下环境变量,告诉MinIO控制台和API的公网访问地址:
MINIO_SERVER_URL=https://s3.mysite.com/blog MINIO_BROWSER_REDIRECT_URL=https://s3.mysite.com
MINIO_SERVER_URL:对应Nginx代理的S3 API路径(/blog/),控制台会用这个地址调用数据接口MINIO_BROWSER_REDIRECT_URL:控制台自身的公网访问地址
3. 重启服务生效
# 重载Nginx配置 sudo nginx -s reload # 重启MinIO容器 docker-compose up -d --force-recreate minio
验证
重新访问https://s3.mysite.com,登录控制台后浏览存储桶,页面应该能正常加载,浏览器不再出现WebSocket连接失败的报错。
内容的提问来源于stack exchange,提问作者RAFIQ RANA
相关产品推荐
相关产品推荐

