跳转到正文

Nginx 与 HTTPS ​

Nginx 作为统一公网入口,终止 TLS,并分别转发 HTTP 和实时连接。客户端只需要一个站点域名。

普通部署配置 ​

源码中的 deploy/nginx.conf 已包含完整 HTTP 配置。根目录必须指向 public,HTTP 上游为 127.0.0.1:8787,/ws 上游为 127.0.0.1:6060。

WebSocket 的关键配置如下,必须放在站点 server 块内:

nginx
location = /ws {
    proxy_pass http://127.0.0.1:6060;
    proxy_http_version 1.1;
    proxy_set_header Host $http_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;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 3600s;
    proxy_buffering off;
}

HTTP 代理保留 Host 与 X-Forwarded-Proto,否则安装向导和资源链接可能生成错误的域名或协议。入口设置 client_max_body_size 128m;这只是传输上限,业务上传限制仍由后台控制。

HTTPS ​

为实际域名签发有效证书,在 Nginx 或宝塔中安装证书和完整证书链,将 HTTP 重定向到 HTTPS。证书文件路径由你的证书管理工具决定。

nginx
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;

这段是站点内需要替换的 TLS 配置,不是完整 server。不要将示例证书路径直接上线。example.com 仅是文档占位域名;本机 hosts 映射不会使你拥有该域名的公网证书签发权限。

后台 WebSocket 公网地址填 wss://example.com/ws。WebSocket API 地址保持内部 Register 地址,例如 127.0.0.1:2060,它不是浏览器访问地址。

Docker 与宝塔 ​

  • Docker:宿主 Nginx 代理到 127.0.0.1:8080,保留 Upgrade 头,容器 Nginx 再分流到 app;见 Docker 安装。
  • 宝塔:在已有站点的配置文件中设置 location,使用宝塔管理证书;见 宝塔安装。

资源访问 ​

公开图片和头像可以由 Nginx直接读取。私有媒体原始 .bin 文件不能按存储路径直接开放,文件下载使用服务端返回的 /app/file/... 地址。不要对整个 uploads 目录添加无条件的 ^~ 静态放行规则。

校验配置后再重载:

bash
sudo nginx -t
sudo systemctl reload nginx

宝塔环境使用面板中的“保存”与 Nginx 重载,或对应的宝塔 Nginx 二进制;不要混用系统 Nginx 的路径。