Files
web/nginx
whm cce3d158d5 fix(upload): 分片改 POST 并放宽 Nginx 反代,避免 PUT 大 body 断连
- 管理端分片请求改为 POST;后端同时保留 PUT
- /api/ 增加 proxy_request_buffering off;CORS Allow-Headers 略扩展

Made-with: Cursor
2026-04-13 15:09:31 +08:00
..
2026-03-27 12:04:22 +08:00

Nginx 配置(新服务器无 NPM 时使用)

域名:yuheng.yuxindazhineng.com,强制 HTTPSSSL 证书按域名单独存放。

1. 证书目录(按域名命名)

在服务器上创建专门存放 SSL 的目录,以域名为子目录名:

sudo mkdir -p /etc/ssl/yh_web/yuheng.yuxindazhineng.com

将证书文件放入该目录Let's Encrypt 或自有证书均可):

  • fullchain.pem — 证书链(或你的 fullchain.crt,需在配置里改扩展名)
  • privkey.pem — 私钥(或你的 privkey.key

一键脚本自动同步:也可把证书放在项目 nginx/ 下,运行 ./pull-and-restart.sh./restart.sh 会自动复制到系统目录。支持两种命名方式:

  • nginx/yuheng.yuxindazhineng.com.pem + nginx/yuheng.yuxindazhineng.com.key(按域名命名)
  • nginx/fullchain.pem + nginx/privkey.pem

示例(若用 certbot

# certbot 默认路径,可复制到统一目录或做软链接
sudo cp /etc/letsencrypt/live/yuheng.yuxindazhineng.com/fullchain.pem /etc/ssl/yh_web/yuheng.yuxindazhineng.com/
sudo cp /etc/letsencrypt/live/yuheng.yuxindazhineng.com/privkey.pem /etc/ssl/yh_web/yuheng.yuxindazhineng.com/
sudo chown -R root:root /etc/ssl/yh_web/yuheng.yuxindazhineng.com
sudo chmod 600 /etc/ssl/yh_web/yuheng.yuxindazhineng.com/privkey.pem

2. 部署 Nginx 配置

# 复制项目内配置到 Nginx 配置目录(按实际路径调整)
sudo cp /www/yh_web/nginx/yuheng.yuxindazhineng.com.conf /etc/nginx/conf.d/

# 检查配置
sudo nginx -t

# 重载
sudo systemctl reload nginx

若 Nginx 使用其他路径(如 sites-enabled),请把上述 conf 放到对应目录并 include 到主配置。

3. 两种部署方式(二选一)

方式 A仅 compose 占 443默认

  • docker-compose.yml 中 nginx 映射 443:443,请求直接进 compose 内 Nginx再反代到 api/web/admin。
  • 宿主机不要为本站点单独起 Nginx不要用本目录的 yuheng.yuxindazhineng.com.conf 占 443否则会与 compose 抢 443 或反代到已废弃的 9528/9529/8088导致 /api/、/admin/ 404。

方式 B宿主机 Nginx 占 443反代到 compose

  • 若宿主机已有 Nginx 监听 443多站点则把 compose 中 nginx 端口改为 8443:443,宿主机用本目录的 yuheng.yuxindazhineng.com.conf(已配置为整站反代到 127.0.0.1:8443)。
  • 复制 conf 到 /etc/nginx/conf.d/nginx -t && systemctl reload nginx

/api/health 或 /admin/ 返回 404 时:在服务器执行 ss -tlnp | grep 443,看 443 是宿主机 nginx 还是 docker。若是宿主机 nginx要么停用该站点配置让 compose 独占 443方式 A要么改为方式 Bcompose 用 8443宿主机反代到 8443

验证文件热加载:把验证文件放到项目根目录的 verify-root/ 即可compose 内 yh_nginx 挂载该目录并在 443 上直接 root /verify-root 提供(见 nginx/yuheng.docker.conf.tpl)。reload 后生效;若仅改文件,可 docker compose restart nginx

4. 新服务器首次安装 Nginx

# CentOS / RHEL / 阿里云
sudo dnf install -y nginx
# 或
sudo yum install -y nginx

# 开机自启并启动
sudo systemctl enable nginx
sudo systemctl start nginx

然后再按上面步骤创建证书目录、放入证书、复制 conf 并重载。

5. 前台动态路由与 404SPA

  • 现象:浏览器直接打开 https://你的域名/some-page 出现 nginx404 Not Found(页脚带 nginx/x.x.x),而不是网站自己的页面。
  • 原因:提供静态文件的 server 未把「不存在的路径」交给 index.htmlNginx 在磁盘上找不到 some-page 文件就返回 404。
  • 要求:托管 web 前台 的站点必须使用 try_files $uri $uri/ /index.html;(见仓库 nginx/web.confweb/Dockerfile 内嵌配置)。若你自建 Nginx请对照修改后再 nginx -t 并重载。
  • 应用内 404:在 SPA 已正确回退的前提下,未在后台发布的路径会由前端路由进入 「页面不存在」 页(NotFound.vue),与上述 nginx 404 不同。
  • Compose 部署web 容器实际加载的是 deploy/web/default.conf(见 docker-compose.yml 挂载)。若线上仍对 /test 等返回 nginx 404,请把仓库里最新的 deploy/web/default.conf 同步到服务器对应路径后,执行 docker compose restart web(或重建 yh_web 容器)。

6. 单实例:宿主机 Nginx 占 443pull-and-restart.sh / restart.sh 自动切换)

逻辑由 scripts/lib-yh-compose-deploy.sh 统一处理(无需单独启动脚本):

  1. 启动前docker compose … down --remove-orphans,只停本项目容器,不停止宿主机 nginx
  2. 写入宿主机站点配置:从 nginx/yuheng.host.conf 生成 /etc/nginx/conf.d/<域名>.conf,并执行 nginx -t
  3. 检测宿主机 Nginx:若在线则跳过;若不在线则执行 systemctl start nginxenable
  4. 启动容器:只起 mongo api web admin(不再启动容器 yh_nginx)。
  5. 证书:同上,/etc/ssl/yh_web/yuheng.yuxindazhineng.com/pull-and-restart.sh / restart.sh 仍会同步仓库内证书到该目录。

回环端口(与 nginx/yuheng.host.conf 一致API 127.0.0.1:8088,前台 9080,后台 9081

说明:不再使用容器 yh_nginx 作为入口,统一为宿主机 Nginx 单入口方案。