部署完 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(仅用于网页可视化管理)
二、前置准备工作
正式配置前,完成两项基础准备,避免后续配置无效:
- 域名解析:在域名服务商后台,添加 A 记录,将上述两个子域名解析到你的服务器公网 IP,等待解析生效(一般 1-10 分钟)。
- SSL 证书:提前申请免费 SSL 证书(阿里云、腾讯云、Let’s Encrypt 均可),准备好
.crt证书文件和.key私钥文件。 - 环境依赖:服务器安装 Nginx,执行
yum install nginx -y或apt 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 加速配置教程,有需要可以持续关注!