secubox-openwrt/DOCS-zh/embedded/vhost-manager.md
CyberMind-FR ccfb58124c docs: Add trilingual documentation (French and Chinese translations)
Add complete French (fr) and Chinese (zh) translations for all documentation:

- Root files: README, CHANGELOG, SECURITY, BETA-RELEASE
- docs/: All 16 core documentation files
- DOCS/: All 19 deep-dive documents including embedded/ and archive/
- package/secubox/: All 123+ package READMEs
- Misc: secubox-tools/, scripts/, EXAMPLES/, config-backups/, streamlit-apps/

Total: 346 translation files created

Each file includes language switcher links for easy navigation between
English, French, and Chinese versions.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-20 10:00:18 +01:00

118 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# VHost 管理器与反向代理说明
> **Languages:** [English](../../DOCS/embedded/vhost-manager.md) | [Francais](../../DOCS-fr/embedded/vhost-manager.md) | 中文
**版本:** 1.0.0
**最后更新:** 2025-12-28
**状态:** 活跃
SecuBox 包含 `luci-app-vhost-manager`LuCI 仪表板 + RPC 后端)以及 `scripts/vhostctl.sh` 助手,使应用程序、向导和配置文件可以声明式地在 nginx 后面发布 HTTP 服务,并支持可选的 TLS 和 HTTP 认证。
---
## 前提条件
1. **软件包**:已安装 `luci-app-vhost-manager`(安装 RPCD 脚本 + LuCI 界面)和带 SSL 的 nginx`nginx-ssl`)。
2. **证书**:通过 `acme.sh` 自动获取 ACME 证书,或使用手动 PEM 文件配合 `tls manual`
3. **应用程序**:确保上游服务在 localhost 或 LAN 上监听例如Zigbee2MQTT 界面在 `http://127.0.0.1:8080`)。
4. **防火墙**:在 WAN 接口上允许入站端口 80/443。
---
## CLI`scripts/vhostctl.sh`
此助手操作 `/etc/config/vhosts`,可被未来的向导/App Store 安装程序调用。
```sh
# 列出现有映射
scripts/vhostctl.sh list
# 为 Zigbee2MQTT 界面添加 HTTPS 反向代理
scripts/vhostctl.sh add \
--domain zigbee.home.lab \
--upstream http://127.0.0.1:8080 \
--tls acme \
--websocket \
--enable
# 稍后启用/禁用或删除
scripts/vhostctl.sh disable --domain zigbee.home.lab
scripts/vhostctl.sh remove --domain zigbee.home.lab
# 修改后重新加载 nginx
scripts/vhostctl.sh reload
```
选项:
| 选项 | 用途 |
|------|------|
| `--domain` | 公共主机名(必填)。 |
| `--upstream` | 本地服务 URL`http://127.0.0.1:8080`)。 |
| `--tls off|acme|manual` | TLS 策略。使用 `manual` + `--cert/--key` 配置自定义证书。 |
| `--auth-user/--auth-pass` | 启用 HTTP 基本认证。 |
| `--websocket` | 为 WebSocket 应用添加 `Upgrade` 头。 |
| `--enable` / `--disable` | 启用/禁用而不删除。 |
脚本具有幂等性:使用现有域名运行 `add` 会更新该条目。
---
## LuCI 仪表板
导航至 **服务 -> SecuBox -> VHost 管理器** 可以:
- 查看活跃/禁用的虚拟主机、TLS 状态、证书过期时间。
- 编辑或删除条目、请求 ACME 证书、查看访问日志。
- 使用表单创建条目域名、上游、TLS、认证、WebSocket
LuCI 后端写入相同的 `/etc/config/vhosts` 文件,因此通过 `vhostctl.sh` 所做的更改会立即显示。
---
## 示例:发布 Zigbee2MQTT
1. 安装 Zigbee2MQTTDocker并确认界面在端口 8080 上监听(参见 `docs/embedded/zigbee2mqtt-docker.md`)。
2. 将其映射到 HTTPS 后面:
```sh
scripts/vhostctl.sh add \
--domain zigbee.secubox.local \
--upstream http://127.0.0.1:8080 \
--tls acme \
--websocket
scripts/vhostctl.sh reload
```
3. (可选)使用 LuCI 请求证书并监控日志。
---
## DMZ 模式 + VHost 工作流
启用新的 **路由器 + DMZ** 网络模式(管理 -> SecuBox -> 网络 -> 模式 -> DMZ
1.`eth2`(或其他物理端口)分配为 DMZ 接口,并为其分配子网,如 `192.168.50.1/24`
2. 应用该模式;后端会创建一个专用防火墙区域(`dmz`),仅转发到 WAN。
3. 将服务器(如 Lyrion、Zigbee2MQTT 界面)连接到 DMZ 端口,使其可以访问互联网但无法访问 LAN。
4. 使用 `scripts/vhostctl.sh add ... --upstream http://192.168.50.10:32400` 通过带 TLS 的 nginx 暴露 DMZ 服务。
回滚只需一键:在 2 分钟窗口内使用网络模式的"确认/回滚"对话框自动恢复先前的配置。
---
## 故障排除
| 问题 | 解决方案 |
|------|----------|
| `scripts/vhostctl.sh add ...` 报错 "Unknown option" | 确保使用 busybox `sh``/bin/sh`)。 |
| ACME 证书缺失 | 确认已安装 `acme.sh`域名解析到路由器80/443 端口可访问。 |
| 502/504 错误 | 检查上游服务、防火墙,或将 `--upstream` 改为 LAN IP。 |
| TLS 手动模式失败 | 提供 PEM 文件的完整路径并验证权限。 |
| 更改不可见 | 运行 `scripts/vhostctl.sh reload``ubus call luci.vhost-manager reload_nginx`。 |
---
## 自动化说明
- 向导/App Store 可以调用 `scripts/vhostctl.sh` 在安装服务时注册它们。
- 配置文件可以保留声明式清单(域名 -> 上游)并在切换模式时调用 `vhostctl.sh add/remove`
- `/etc/config/vhosts` 仍然是唯一的事实来源,由 LuCI 应用和 RPC 后端使用。