Răsfoiți Sursa

chore: 配置反向代理 agent.zenpower.cc 为受信任代理

- systemd 服务设置 AGENT_SERVER_TRUST_PROXY=100.96.0.2(代理经 VPN 隧道连入的
  地址),只信任它的 X-Forwarded-* 头,服务记录真实客户端 IP,登录限流按真实 IP 生效
- 10-deployment:记录反向代理地址与验证结果(HTTPS、SSE 不缓冲、20 MB 上传)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Jerry Liang 1 săptămână în urmă
părinte
comite
07229790ee
2 a modificat fișierele cu 8 adăugiri și 2 ștergeri
  1. 3 1
      deploy/agent-server.service
  2. 5 1
      docs/design/10-deployment.md

+ 3 - 1
deploy/agent-server.service

@@ -14,8 +14,10 @@ Environment=NODE_ENV=production
 Environment=HOME=/srv/agent-server/home
 Environment=AGENT_SERVER_DATA_DIR=/srv/agent-server
 Environment=AGENT_SERVER_ADMIN_DIST=/srv/agent-server/app/admin
-# 监听所有网卡(局域网可访问);前面加反向代理后改回 127.0.0.1 并设置 AGENT_SERVER_TRUST_PROXY=true
+# 监听所有网卡:局域网可直接访问,反向代理经 VPN 隧道(100.96.0.2)访问
 Environment=AGENT_SERVER_HOST=0.0.0.0
+# 反向代理 agent.zenpower.cc 经 VPN 隧道连入的地址,只信任它的 X-Forwarded-* 头
+Environment=AGENT_SERVER_TRUST_PROXY=100.96.0.2
 ExecStart=/usr/local/bin/node dist/main.js
 Restart=on-failure
 RestartSec=3

+ 5 - 1
docs/design/10-deployment.md

@@ -31,7 +31,11 @@
 首次安装顺序:`sudo deploy/install.sh` → `sudo deploy/setup-runtime.sh` → `deploy/deploy.sh` → 在后台"概览"页登录 Claude(或执行 `agent-claude auth login`)。
 
 ## 4. systemd 加固(deploy/agent-server.service)
-- 监听 `0.0.0.0:8787`(局域网可直接访问,HTTP 明文);以后加 HTTPS 反向代理时改回 `127.0.0.1`,并设置 `AGENT_SERVER_TRUST_PROXY=true`
+- 监听 `0.0.0.0:8787`:局域网可直接访问(HTTP 明文);公网经反向代理访问
+- 反向代理:**https://agent.zenpower.cc**(代理服务器 47.236.165.115,经 VPN 隧道以 `100.96.0.2` 连入),在代理上终止 HTTPS,HTTP 自动跳转 HTTPS
+  - `AGENT_SERVER_TRUST_PROXY=100.96.0.2`:只信任这个地址的 X-Forwarded-*,服务记录真实客户端 IP,登录限流按真实 IP 生效
+  - 已验证(2026-10-23):SSE 不缓冲(心跳按时到达)、20 MB 上传正常
+  - 代理的隧道地址变化时,需要同步修改 unit 中的 `AGENT_SERVER_TRUST_PROXY`
 - `User=agentsvc`;`ProtectSystem=strict` + 只有 home/data/workspaces/logs/knowledge 可写;`ProtectHome=yes`;`PrivateTmp=yes`;`UMask=0077`
 - `NoNewPrivileges=yes`;`InaccessiblePaths=` docker.sock 与 LXD socket(纵深防御,agentsvc 本身也没有权限)
 - 不能开启 `RestrictNamespaces`(bubblewrap 需要)