Logo 📚 Digital Library

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/ 即显示文件树。


✅ 优势#

  1. 不需要挂载 s3fs,也不占用本地磁盘空间
  2. 桶内容实时同步,上传文件立即可见
  3. 可配合 MinIO Web UI 或 MC 管理桶