mirror of
https://github.com/Gloridust/WechatOnCloud.git
synced 2026-09-20 11:33:32 +08:00
feat: 公网访问加固(登录限速/会话滑动续期)+ 管理页三 Tab 信息架构重构
公网/NAS 稳定性专项扫描的产出: ① 登录限速:面板常被直接暴露公网,/api/auth/login 原先无任何限速可被无限爆破。 双键计数(IP+用户名 5 次、IP 20 次 / 15 分钟窗口),触发回 429 + 面板日志告警; 用 socket 直连地址而非可伪造的 XFF;成功登录清零。已实测:5×401 → 第 6 次 429。 ② 会话滑动续期:固定 30 天硬过期在"常年挂着"的 NAS 场景表现为"隔三差五要重登"。 现剩余不足一半自动续满(服务端),鉴权层顺手刷新 cookie maxAge(浏览器侧同步)—— 活跃用户永不掉线,闲置超时才需重登。 ③ DNS-rebind 钩子补 return reply(async 钩子已 send 后的规范终止写法)。 ④ 运维文档新增「公网访问 / 反代部署」章节:nginx 完整示例(ws 升级头 + proxy_read_timeout 3600s——默认 60s 是"桌面挂着不动 1 分钟就断线"的元凶 + client_max_body_size)、Caddy/frp/Cloudflare 注意事项、PANEL_ALLOWED_HOSTS 提醒。 ⑤ 管理页重构:7 个区块一条长滚动 → 「实例 / 用户 / 系统」三 Tab (实例=日常操作;用户=子账号+本账号;系统=残留容器+数据卷+诊断日志+关于)。 牛奶布艺分段选择器(凹槽+浮起胶囊),Tab 角标点提示待处理事项(可升级/有残留), 记住上次停留 Tab;子账号(非管理员)视图不变。
This commit is contained in:
37
doc/部署与运维.md
37
doc/部署与运维.md
@@ -99,3 +99,40 @@ WechatOnCloud/
|
||||
```
|
||||
|
||||
数据:面板账号(含密码哈希)在 `./data-panel`,各微信实例在 docker 命名卷 `woc-data-<id>`;`./data-panel` 已在 `.gitignore` 中。
|
||||
|
||||
## 公网访问 / 反代部署(nginx 示例)
|
||||
|
||||
把面板暴露到公网(域名 + HTTPS)时,有三件事必须做对,否则表现为「登录 400 / 桌面黑屏 / 挂一会儿就断线」:
|
||||
|
||||
1. **把对外域名加进 `PANEL_ALLOWED_HOSTS`**(`.env`,逗号分隔,支持 `*.example.com`),然后 `docker compose up -d` 重建(不是 restart)。这是防 DNS-rebinding 的白名单,不加会被面板以 400 拒绝。
|
||||
2. **反代必须透传 WebSocket**(远程桌面全靠它)。
|
||||
3. **把空闲超时调大**。nginx 默认 `proxy_read_timeout 60s`——桌面静止不动 1 分钟没有数据流过,nginx 就掐断连接,表现为「挂着不动就断线重连」。
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name woc.example.com;
|
||||
# ssl_certificate / ssl_certificate_key ...
|
||||
|
||||
location / {
|
||||
proxy_pass http://<NAS 内网 IP>:36080;
|
||||
proxy_http_version 1.1;
|
||||
# WebSocket 升级(远程桌面/音频都走 ws)
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
# 透传真实 Host(与 PANEL_ALLOWED_HOSTS 对得上)
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-Host $host;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
# 关键:空闲超时调大,否则桌面静止 60s 即断(nginx 默认值)
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
# 大文件上传(传文件到桌面 / 卷导入)
|
||||
client_max_body_size 3g;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
其它反代同理:Caddy 默认无空闲超时(开箱即用);frp 建议 `transport.heartbeatInterval` 保持默认并确认 `proxy_read_timeout` 类配置未收紧;Cloudflare 免费版对 WebSocket 空闲约 100s 断开,桌面场景建议用「灰云」(仅 DNS)或自建隧道。
|
||||
|
||||
安全提示:面板已内建登录限速(15 分钟窗口内同源失败 5 次即暂时锁定),但公网暴露仍建议:强密码、改默认端口、优先用 VPN/内网穿透而非直接开放。
|
||||
|
||||
Reference in New Issue
Block a user