Minio图床树
nginx配置#
明白!我们可以直接通过 Nginx 代理 MinIO 桶,实现文件树浏览,而无需挂载 s3fs,也不用占用本地磁盘。关键是用 MinIO 的公开桶 + Nginx autoindex 或者直接返回静态 HTML。下面给出完整方案:
1️⃣ 前提条件#
- 桶名:
img - MinIO API 地址:
http://127.0.0.1:9000 - 桶已设置公开访问:
mc alias set fi http://127.0.0.1:9000 admin PASSWORD99
mc mb fi/img
mc anonymous set public fi/img- Nginx 已安装,SSL 证书路径
/etc/nginx/ssl/fullchain.pem与/etc/nginx/ssl/privkey.pem
2️⃣ Nginx 配置(直接代理桶)#
在 /etc/nginx/conf.d/s3.conf 添加:
server {
listen 443 ssl http2;
server_name api.isrv.cn;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# 桶 API 代理
location /img/ {
proxy_pass http://127.0.0.1:9000/img/; # 代理 MinIO 桶
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;
# 对于 MinIO XML 输出,可用 Javascript 转为可视文件树
}
# 可选:API 代理,保留 MinIO Web UI
location /minio/ {
proxy_pass http://127.0.0.1:9001/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
}
}
# HTTP 自动跳转 HTTPS
server {
listen 80;
server_name api.isrv.cn;
return 301 https://$host$request_uri;
}3️⃣ 前端文件树渲染(可选)#
MinIO 返回的是 XML:
<ListBucketResult>
<Contents><Key>file1.png</Key></Contents>
<Contents><Key>file2.jpg</Key></Contents>
</ListBucketResult>可以通过简单的 HTML+JS,把 XML 转换成可点击的文件列表:
<!DOCTYPE html>
<html>
<head><title>MinIO Bucket Viewer</title></head>
<body>
<h1>Bucket img</h1>
<ul id="filelist"></ul>
<script>
fetch('/img/?list-type=2')
.then(r => r.text())
.then(xmlText => {
const parser = new DOMParser();
const xml = parser.parseFromString(xmlText, "application/xml");
const keys = xml.getElementsByTagName('Key');
const ul = document.getElementById('filelist');
for(let i=0; i<keys.length; i++){
const li = document.createElement('li');
const a = document.createElement('a');
a.href = '/img/' + keys[i].textContent;
a.textContent = keys[i].textContent;
li.appendChild(a);
ul.appendChild(li);
}
});
</script>
</body>
</html>保存为 /var/www/html/img/index.html,Nginx 访问 /img/ 即显示文件树。
✅ 优势#
- 不需要挂载 s3fs,也不占用本地磁盘空间
- 桶内容实时同步,上传文件立即可见
- 可配合 MinIO Web UI 或 MC 管理桶
📚 Digital Library