Nginx 反向代理
应用只提供 HTTP,公网部署须由 Nginx、Caddy 等反向代理终止 TLS。本文给出按 Host 分发到各入口的完整 Nginx 规则示例。
由管理后台生成配置
管理后台「区域管理 → 服务端配置」支持按区域生成 Nginx / Caddy 反向代理配置:填写根域名与端口后即可预览、保存并复制成品配置,同一区域的多台机器可直接复用。本文示例与生成结果一致,可作为手工编写时的参考。
一、端口对应关系
端口对应关系(与安装默认一致):
| 入口 | 默认后端端口 |
|---|---|
| 管理后台 / 未匹配域名(default) | 38002 |
S3(固定域名或 s3.<region>.…) | 38003 |
| 资源访问(桶通配 / Access) | 38004 |
| WebDAV | 38005 |
- HTTPS:对外提供管理后台、S3、资源访问或 WebDAV 时,建议在反向代理上配置 HTTPS,并按下方
map将请求转发到对应后端端口。 - 端口与防火墙:公网只放行 80/443(或反向代理端口);应用端口
38002–38005建议仅本机或内网可达。
二、按 Host 分发的 map 规则
推荐用 map 按 Host 选择后端端口与 X-Forwarded-Proto,再统一 proxy_pass。请将示例中的 example.com 换成你的根域名,端口若安装时改过则同步修改。
将下列内容放在 Nginx 的 http { } 内(map 必须在 server 之外):
# 按 Host 选择后端端口(独立端口部署)map $http_host $backend_port { hostnames on; # 未匹配时走管理后台;若希望未匹配走资源访问可改为 38004 default "38002"; # 固定域名(按实际域名修改) "admin.example.com" "38002"; "s3.example.com" "38003"; "dav.example.com" "38005"; "cloud.example.com" "38002"; # 桶通配:<bucket>.s3.example.com → 资源访问 ~^[^.]+\.s3\.example\.com$ "38004"; # 多区域:s3.<region>.example.com → S3 ~^s3\.[a-zA-Z0-9-]+\.example\.com$ "38003"; # 多区域桶通配:<bucket>.s3.<region>.example.com → 资源访问 ~^[^.]+\.s3\.[a-zA-Z0-9-]+\.example\.com$ "38004"; # 多区域 WebDAV:<name>.dav.<region>.example.com ~^[^.]+\.dav\.[a-zA-Z0-9-]+\.example\.com$ "38005";}# 按 Host 声明对外协议(HTTPS 站点填 https)map $http_host $custom_x_forwarded_proto { hostnames on; default $scheme; "admin.example.com" "https"; "s3.example.com" "https"; "dav.example.com" "https"; "cloud.example.com" "https"; ~^[^.]+\.s3\.example\.com$ "https"; ~^s3\.[a-zA-Z0-9-]+\.example\.com$ "https"; ~^[^.]+\.s3\.[a-zA-Z0-9-]+\.example\.com$ "https"; ~^[^.]+\.dav\.[a-zA-Z0-9-]+\.example\.com$ "https";}三、server 内统一反代
server 内统一反代(证书与 listen 443 ssl 按站点自行配置):
location / { proxy_pass http://127.0.0.1:$backend_port; 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 $custom_x_forwarded_proto; proxy_http_version 1.1; proxy_redirect off; # 大文件 / 分片上传建议放宽 client_max_body_size 0; proxy_request_buffering off; proxy_read_timeout 3600s; proxy_send_timeout 3600s;}同时在 configs/config.yaml 的 domains.main_node(及区域模板)中填写与 Nginx 一致的域名,并与「区域管理」中的端点配置对应。
四、宝塔面板注意事项
使用宝塔面板时:请删除站点 Nginx 配置中由宝塔自动添加的以下两个 location 块,否则对图片、JS、CSS 的请求会被 Nginx 直接按静态文件处理或缓存,不会转发到后端,导致管理后台或资源访问异常。
- 删除 图片等静态缓存 块(
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$,内含expires 30d、access_log /dev/null等)。 - 删除 JS/CSS 缓存 块(
location ~ .*\.(js|css)?$,内含expires 12h、access_log /dev/null等)。
保留上述 location / 代理即可,让所有请求统一走后端。map 可写在站点配置文件顶部(server 外)或 nginx.conf 的 http 段中。
五、多节点场景
区域节点同样需要按域名分发 S3 / 资源访问 / WebDAV 端口,规则与主节点一致;区域端点域名(如 s3.<region>.example.com)需与「区域管理」中该区域的端点配置一一对应。区域节点的生成与安装见 区域节点部署。