优化企业网站功能

This commit is contained in:
2026-08-20 16:21:07 +08:00
parent 112d60b993
commit 3f0fcb88e7
45 changed files with 8758 additions and 5058 deletions
@@ -103,6 +103,29 @@ location /api/ {
Go 的路由注册在 `/backend/*`、`/platform/*`(没有 `/api` 前缀),靠这个尾部斜杠剥前缀。
### 2.5 七牛图片统一通过官网域名代理
完整配置已在两个主域名的 `server` 块中加入 `location /qiniu/`。该规则会把官网域名下的 `/qiniu/` 请求通过 **HTTP** 代理到历史七牛域名 `http://7colud.yunzer.cn/`,并去掉 `/qiniu/` 前缀;浏览器仍通过官网 HTTPS 接收图片。
例如,浏览器请求:
```text
https://yunzer.com.cn/qiniu/2026/06/02/1780371759517804300.png
```
nginx 实际请求:
```text
http://7colud.yunzer.cn/2026/06/02/1780371759517804300.png
```
**存储配置填写规则**:平台后台“存储配置”中的 `qiniu_domain` 必须与实际复制的主站配置一致,且**末尾不要加 `/`**:
- 复制 `yunzer.com.cn` 配置时填写 `https://yunzer.com.cn/qiniu`;
- 复制 `dh2.fun` 配置时填写 `https://dh2.fun/qiniu`。
Go 官网渲染会将数据库中已有的 `http(s)://7colud.yunzer.cn/路径`(兼容历史拼写 `7cloud.yunzer.cn`)替换为此配置的地址;之后新上传的七牛文件也会直接使用该代理地址。`location /qiniu/` 的 `proxy_pass` **末尾斜杠不能删除**,否则七牛会收到包含 `/qiniu/` 的错误对象路径。
---
## 三、完整配置 —— 宝塔站点 `dh2.fun`
@@ -186,6 +209,19 @@ server {
proxy_set_header X-Forwarded-Proto $scheme;
}
# 七牛图片代理:/qiniu/ 前缀会被剥掉,转发到七牛对象路径
# 存储配置 qiniu_domain 填 https://dh2.fun/qiniu(末尾不要加 /)
location /qiniu/ {
proxy_pass http://7colud.yunzer.cn/;
proxy_set_header Host 7colud.yunzer.cn;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 浏览器缓存图片 7 天,减少重复请求
expires 7d;
add_header Cache-Control "public, max-age=604800";
}
# 其余一切请求全部交给 Go:首页、/news、/page/xxx、/themes/ 静态资源、
# /uploads/ 以及以后新增的任何路由,自动生效,nginx 永远不用再改
location / {
@@ -339,6 +375,19 @@ server {
proxy_set_header X-Forwarded-Proto $scheme;
}
# 七牛图片代理:/qiniu/ 前缀会被剥掉,转发到七牛对象路径
# 存储配置 qiniu_domain 填 https://yunzer.com.cn/qiniu(末尾不要加 /)
location /qiniu/ {
proxy_pass http://7colud.yunzer.cn/;
proxy_set_header Host 7colud.yunzer.cn;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 浏览器缓存图片 7 天,减少重复请求
expires 7d;
add_header Cache-Control "public, max-age=604800";
}
# 其余一切请求全部交给 Go:首页、/news、/page/xxx、/themes/ 静态资源、
# /uploads/ 以及以后新增的任何路由,自动生效,nginx 永远不用再改
location / {
@@ -416,17 +465,18 @@ server {
1. **子域名必须用泛域名证书**。租户域名是二级域名(`ceshi.yunzer.com.cn`),单域名证书会导致 HTTPS 证书错误。需在宝塔为 `*.yunzer.com.cn`、`*.dh2.fun` 申请泛域名证书(DNS 验证),并替换配置中的证书路径。
2. **upstream 不能重名**。两个站点配置都在同一 http 上下文,本文分别用 `go_backend_dh2`、`go_backend_yunzer`;重名会 `duplicate upstream` 启动失败。
3. **`/api/` 的 `proxy_pass` 尾部斜杠不能删**,它负责剥掉 `/api` 前缀(Go 路由注册在 `/backend/*`、`/platform/*`)。兜底 `location /` 的 `proxy_pass` 则**不带**尾部斜杠(原样转发 URI)。
4. **不要再给官网域名加 `js|css` 正则缓存 location**。正则 location 优先级高于兜底前缀 location,会拦截 `/themes/xxx/static/main.js` 去本地 root 找文件导致 404。模板静态资源由 Go(beego)直接提供。
5. **`proxy_set_header Host $host;` 必须保留**。Go 完全依赖 Host 识别租户;若透传成 upstream 地址,所有请求都会被识别失败。
6. **Go 侧前置条件**:
3. **`/api/` 和 `/qiniu/` 的 `proxy_pass` 尾部斜杠不能删**。`/api/` 的斜杠负责剥掉 `/api` 前缀(Go 路由注册在 `/backend/*`、`/platform/*`);`/qiniu/` 的斜杠负责剥掉 `/qiniu` 前缀,使七牛收到正确对象路径。兜底 `location /` 的 `proxy_pass` 则**不带**尾部斜杠(原样转发 URI)。
4. **存储域名必须与复制的主站配置对应**。使用 `yunzer.com.cn` 配置则后台“存储配置”中的 `qiniu_domain` 填 `https://yunzer.com.cn/qiniu`;使用 `dh2.fun` 配置则填 `https://dh2.fun/qiniu`。均不带末尾 `/`。
5. **不要再给官网域名加 `js|css` 正则缓存 location**。正则 location 优先级高于兜底前缀 location,会拦截 `/themes/xxx/static/main.js` 去本地 root 找文件导致 404。模板静态资源由 Go(beego)直接提供。
6. **`proxy_set_header Host $host;` 必须保留**。Go 完全依赖 Host 识别租户;若透传成 upstream 地址,所有请求都会被识别失败。
7. **Go 侧前置条件**:
- 启动模式 `APP_MODE` 为 `all`(默认)或 `index`,否则官网渲染路由未注册;
- `go/themes/` 目录与 Go 服务启动目录同级(模板文件在 **Go 项目目录** `go/themes/{编码}/`,与 platform/backend 前端项目无关);
- 数据库已执行 `sql/yz_cms_frontend_tables.sql`。
7. **域名发放数据必须精确**。`yz_system_tenant_domain.full_domain` 要与实际访问域名完全一致(不带协议、不带端口、不带路径),且 `status=1`、`delete_time` 为 NULL。
8. **DNS 泛解析**。`*.yunzer.com.cn`、`*.dh2.fun` 需要配置泛解析 A 记录指向服务器,否则新发放的子域名无法访问(与 nginx 无关)。
9. **HSTS 提醒**。配置了 `Strict-Transport-Security`,一旦浏览器记住,证书出问题期间该域名将无法用 HTTP 访问;测试阶段可先注释掉该行。
10. **宝塔面板操作提示**。直接编辑站点配置文件后,用 `nginx -t` 校验再重载;宝塔后续"站点设置"的某些操作可能重写配置文件,改前建议备份。
8. **域名发放数据必须精确**。`yz_system_tenant_domain.full_domain` 要与实际访问域名完全一致(不带协议、不带端口、不带路径),且 `status=1`、`delete_time` 为 NULL。
9. **DNS 泛解析**。`*.yunzer.com.cn`、`*.dh2.fun` 需要配置泛解析 A 记录指向服务器,否则新发放的子域名无法访问(与 nginx 无关)。
10. **HSTS 提醒**。配置了 `Strict-Transport-Security`,一旦浏览器记住,证书出问题期间该域名将无法用 HTTP 访问;测试阶段可先注释掉该行。
11. **宝塔面板操作提示**。直接编辑站点配置文件后,用 `nginx -t` 校验再重载;宝塔后续"站点设置"的某些操作可能重写配置文件,改前建议备份。
---
@@ -441,7 +491,10 @@ curl -H "Host: ceshi.yunzer.com.cn" http://10.31.100.2:8081/
# 2. 验证 nginx → Go 链路
curl -k -H "Host: ceshi.yunzer.com.cn" https://127.0.0.1/
# 3. 浏览器访问 https://ceshi.yunzer.com.cn
# 3. 验证七牛代理:应返回图片内容或 200/304,而不是 Go 的 404 页面
curl -I https://yunzer.com.cn/qiniu/2026/06/02/1780371759517804300.png
# 4. 浏览器访问 https://ceshi.yunzer.com.cn
```
### 6.2 常见现象对照表