RustFS 域名配置完全指南:域名绑定、HTTPS 加密、反向代理实战

9次阅读
没有评论

部署完 RustFS 基础服务后,默认只能通过 IP:端口 的方式访问存储控制台与 S3 接口,不仅端口暴露不安全、访问繁琐,也无法适配正式业务、图床、私有云存储等线上场景。想要对外提供标准、优雅、安全的对象存储服务,域名绑定 + HTTPS 加密是必经步骤。

今天这篇博文,我将从零讲解 RustFS 全套域名配置方案,包含官方原生域名参数配置、Nginx 反向代理、双域名分离配置(API/控制台独立域名)、SSL 证书部署,兼容 Docker、Docker Compose、Linux 二进制三种部署模式,彻底解决 IP 访问、端口暴露、HTTP 不安全、S3 域名校验失败等问题。

一、先搞懂:RustFS 域名配置核心原理

很多新手会混淆反向代理和原生域名配置,这里先理清两个核心配置逻辑,避免配置出错:

1. RustFS 原生域名参数(核心)

RustFS 内置 SERVER_DOMAINS 官方参数,用于服务端信任域名校验,作用是允许指定域名访问 S3 服务、支持虚拟主机模式存储桶访问,是 S3 协议正常对接、客户端不报错的关键配置,缺一不可。

2. Nginx 反向代理(落地访问)

通过 Nginx 屏蔽原生 9000/9001 端口,实现 80/443 标准端口访问,同时统一管理域名、SSL 证书、请求转发、跨域限制,是生产环境标准部署方案。

3. 推荐域名规划

业务规范化建议拆分双域名,权限与访问隔离:

  • S3 API 域名s3.你的域名.com (用于程序对接、文件上传下载、客户端连接)
  • 控制台域名oss.你的域名.com (仅用于网页可视化管理)

二、前置准备工作

正式配置前,完成两项基础准备,避免后续配置无效:

  1. 域名解析:在域名服务商后台,添加 A 记录,将上述两个子域名解析到你的服务器公网 IP,等待解析生效(一般 1-10 分钟)。
  2. SSL 证书:提前申请免费 SSL 证书(阿里云、腾讯云、Let’s Encrypt 均可),准备好.crt 证书文件和 .key 私钥文件。
  3. 环境依赖:服务器安装 Nginx,执行 yum install nginx -yapt install nginx -y

三、全场景 RustFS 原生域名配置

根据你的部署方式,对应修改 RustFS 核心域名参数,让服务信任自定义域名,这是 S3 客户端正常连接的核心步骤。

1. Docker Compose 配置(生产推荐)

修改 docker-compose.yml,新增RUSTFS_SERVER_DOMAINS 域名参数,支持单个/多个域名:

version: '3.8'
services:
  rustfs:
    image: rustfs/rustfs:latest
    container_name: rustfs
    hostname: rustfs
    restart: unless-stopped
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - ./data:/data
      - ./config:/etc/rustfs
    environment:
      # 核心认证配置
      - RUSTFS_ACCESS_KEY=prod_rustfs_001
      - RUSTFS_SECRET_KEY=你的高强度自定义密钥
      # 控制台配置
      - RUSTFS_CONSOLE_ENABLE=true
      - RUSTFS_CONSOLE_ADDRESS=:9001
      # 域名核心配置:填写你的S3业务域名
      - RUSTFS_SERVER_DOMAINS=s3.你的域名.com
      # 性能优化配置
      - RUSTFS_THREADS=$(nproc)
      - RUSTFS_GC_INTERVAL=1800
      - RUSTFS_REPLICA=2

修改完成后重启服务生效:docker-compose up -d

2. 原生二进制部署配置

编辑配置文件 /etc/rustfs/config.toml,在 server 模块新增域名配置:

[server]
host = "0.0.0.0"
port = 9000
console_port = 9001
# 新增自定义信任域名
server_domains = ["s3.你的域名.com"]

[storage]

data_dir = “/data/rustfs” gc_interval = 1800

[security]

access_key = “自定义访问密钥” secret_key = “自定义安全密钥”

重启服务生效:systemctl restart rustfs

3. 临时 Docker 命令部署配置

在启动命令中追加域名环境变量,适合临时测试环境:

docker run -d \
--name rustfs \
--restart=always \
-p 9000:9000 \
-p 9001:9001 \
-v /opt/rustfs/data:/data \
-e RUSTFS_ACCESS_KEY=rustfsadmin \
-e RUSTFS_SECRET_KEY=你的自定义密钥 \
-e RUSTFS_CONSOLE_ENABLE=true \
-e RUSTFS_CONSOLE_ADDRESS=:9001 \
-e RUSTFS_SERVER_DOMAINS=s3.你的域名.com \
rustfs/rustfs:latest

四、Nginx 反向代理 + HTTPS 完整配置

完成 RustFS 域名信任配置后,通过 Nginx 实现域名访问、端口隐藏、HTTPS 加密,分为S3 API 代理配置控制台代理配置

1. 统一配置目录与证书部署

# 创建Nginx站点配置目录、SSL证书目录
mkdir -p /etc/nginx/conf.d/rustfs
mkdir -p /etc/nginx/ssl

# 将你的证书文件上传至ssl目录,并重命名
# 证书:rustfs.crt  私钥:rustfs.key

2. S3 API 域名配置(s3.xxx.com)

新建文件 /etc/nginx/conf.d/rustfs/s3-api.conf

server {
    listen 80;
    server_name s3.你的域名.com;
    # HTTP强制跳转HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name s3.你的域名.com;

    # SSL证书配置
    ssl_certificate /etc/nginx/ssl/rustfs.crt;
    ssl_certificate_key /etc/nginx/ssl/rustfs.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    # 反向代理核心配置
    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;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # 适配S3大文件上传、分片传输
        client_max_body_size 1024M;
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
    }
}

3. 控制台域名配置(oss.xxx.com)

新建文件 /etc/nginx/conf.d/rustfs/oss-console.conf

server {
    listen 80;
    server_name oss.你的域名.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name oss.你的域名.com;

    ssl_certificate /etc/nginx/ssl/rustfs.crt;
    ssl_certificate_key /etc/nginx/ssl/rustfs.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://127.0.0.1:9001;
        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;
    }
}

五、配置校验与服务生效

1. 检查 Nginx 配置语法

nginx -t

显示 test is successful 即为配置无误。

2. 重启 Nginx 生效配置

systemctl restart nginx
systemctl enable nginx

3. 访问验证

  • 控制台访问:https://oss.你的域名.com,可正常登录、管理存储桶
  • S3 接口验证:通过 AWS CLI、MinIO Client、PicGo 等工具连接 https://s3.你的域名.com,测试上传下载无报错

六、S3 客户端域名适配配置

配置域名后,客户端连接需要开启路径模式访问,适配 RustFS 域名规则,以 rclone 为例:

[rustfs]
type = s3
provider = Minio
access_key_id = 你的AccessKey
secret_access_key = 你的SecretKey
endpoint = https://s3.你的域名.com
region = us-east-1
force_path_style = true

核心关键:force_path_style = true,关闭虚拟域名桶模式,避免连接失败。

七、域名配置常见踩坑与解决方案

  • 域名访问 403 权限错误:大概率未配置 RUSTFS_SERVER_DOMAINS,RustFS 不信任当前访问域名,补全域名配置并重启服务即可解决。
  • HTTPS 证书报错:检查证书文件路径、文件名是否正确,确认证书域名与访问域名一致,重启 Nginx。
  • 文件上传超时:修改 Nginx 配置中 client_max_body_size 和超时时间,适配大文件传输场景。
  • 客户端连接提示域名不合法:客户端必须开启 force_path_style = true 路径访问模式,这是 RustFS 域名对接的必填配置。
  • 解析正常但无法访问:检查服务器防火墙、云服务器安全组,放行 80、443 端口。
  • 报错 Could not connect to the endpoint URL / 127.0.0.1:9000/9001 URL拼写错误:该报错是配置域名反向代理后最常见的连接失败问题,核心原因与解决方案如下: 1. 错误根源:客户端/程序仍填写本地回环地址127.0.0.1:9000/9001 对接服务,域名模式下 RustFS 会校验访问来源,禁止本地裸端口直连,同时本地端口存在隐性URL格式校验限制; 2. 解决方案:务必替换为已配置HTTPS的正式域名端点 https://s3.你的域名.com,禁止使用IP+端口访问; 3. 兜底排查:确认 RUSTFS_SERVER_DOMAINS 已正确配置当前业务域名、Nginx代理正常、客户端开启 force_path_style = true,修改配置后重启RustFS与Nginx服务即可恢复连接。

八、总结

RustFS 域名配置的核心逻辑可以总结为两步:服务端信任域名配置 + Nginx 反向代理加密。原生 SERVER_DOMAINS 参数是保证 S3 协议正常通信的核心,Nginx 则实现了域名美化、端口隐藏、HTTPS 安全加密,适配所有线上生产场景。

配置双域名分离架构后,控制台管理与业务接口访问完全隔离,安全性、规范性大幅提升,可直接用于企业业务存储、个人图床、数据备份、私有云服务等场景。后续我会更新 RustFS 域名泛解析、多域名绑定、CDN 加速配置教程,有需要可以持续关注!

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)
验证码