小程序修正

This commit is contained in:
tianmo committed 2026-09-29 20:51:39 +08:00
1 parent 5a92bab835
commit 6ae4c109ce
12 files changed
+232 -62

No files matched your search

+20 -2
View File
@@ -166,14 +166,31 @@ Images/Placeholder/weixin.png
付费视频的鉴权由服务端 `/media/*` 签名通道提供(地址有效期 30 分钟,HLS 的 `.ts` 分片也逐行带签名)。
但如果 `Course/` 目录同时被数据域名公开暴露,任何人猜到路径就能直接下载,这套防护等于没有。
**在数据端站点的 Nginx 配置里加一条:**
注意 `Course/` 目录里有两类东西,规则要区分对待:
| 路径 | 内容 | 处理 |
|---|---|---|
| `Course/{课程code}.png` | 课程封面图 | **必须公开**,小程序课程列表要用 |
| `Course/{code}/{章节}/{播放}/playlist.m3u8` | 付费视频 | **必须挡住** |
**在数据端站点的 Nginx 配置里加这两条(顺序不能反):**
```nginx
location ^~ /Course/ {
# Course 目录下的图片(课程封面)放行
location ~* ^/Course/.*\.(png|jpe?g|webp|gif)$ {
try_files $uri =404;
}
# Course 目录下的其它内容(视频切片、播放列表)一律拒绝
location ~ ^/Course/ {
deny all;
}
```
> 两条都用正则 `location`,放行规则写在前面。Nginx 对正则 location 按书写顺序匹配,
> 第一条命中就不再往下走。**不能用 `location ^~ /Course/`** —— `^~` 优先级高于正则,
> 会跳过放行规则,导致课程封面也变成 403。
免费内容(`Images/`、`WebPages/`、`FreeVideos/`)保持公开即可。
> 若后续改用 CDN,把 `MediaService.buildSignedUrl` 换成 CDN 厂商的签名方式,并在 CDN 侧对 `Course/` 开鉴权。
@@ -241,6 +258,7 @@ location ^~ /Course/ {
- [ ] 未购买课程看不到课时列表(直接请求接口返回 3000 错误码)
- [ ] 支付一笔小额订单,课程正确开通
- [ ] 管理后台能看到这笔订单,状态为「已开通」
- [ ] **数据端已加 `Course/` 防盗链规则**,且「知识」页课程封面正常显示(200)
---