Nginx 反向代理

应用只提供 HTTP,公网部署须由 Nginx、Caddy 等反向代理终止 TLS。本文给出按 Host 分发到各入口的完整 Nginx 规则示例。

由管理后台生成配置

管理后台「区域管理 → 服务端配置」支持按区域生成 Nginx / Caddy 反向代理配置:填写根域名与端口后即可预览、保存并复制成品配置,同一区域的多台机器可直接复用。本文示例与生成结果一致,可作为手工编写时的参考。


一、端口对应关系

端口对应关系(与安装默认一致):

入口默认后端端口
管理后台 / 未匹配域名(default)38002
S3(固定域名或 s3.<region>.…)38003
资源访问(桶通配 / Access)38004
WebDAV38005
  • HTTPS:对外提供管理后台、S3、资源访问或 WebDAV 时,建议在反向代理上配置 HTTPS,并按下方 map 将请求转发到对应后端端口。
  • 端口与防火墙:公网只放行 80/443(或反向代理端口);应用端口 38002–38005 建议仅本机或内网可达。

二、按 Host 分发的 map 规则

推荐用 map 按 Host 选择后端端口与 X-Forwarded-Proto,再统一 proxy_pass。请将示例中的 example.com 换成你的根域名,端口若安装时改过则同步修改。

将下列内容放在 Nginx 的 http { } 内(map 必须在 server 之外):

Nginx
# 按 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 按站点自行配置):

Nginx
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)需与「区域管理」中该区域的端点配置一一对应。区域节点的生成与安装见 区域节点部署。