# HTTP 服务器路径陷阱

## 2026-06-16 教训：给张哥的下载链接403排查三部曲

**场景**：
- 文件实际在 `/root/.hermes/webchat/static/funny/funny_package.tar.gz`
- HTTP服务器启动于 `cd /root && python3 -m http.server 8899`（根目录=/root）
- 给张哥的链接 `http://IP:8899/funny_package.tar.gz` → 403
- 本地 `curl` 测试 → 也是403/404（文件不在根目录）

**🔍 排查步骤**：

1. **文件是否在服务器根目录？**
   - 先 `ps aux | grep http.server` 看服务器从哪个目录启动
   - 再 `ls -la /服务器根目录/文件名` 确认文件是否存在
   - 如果不在，`cp <真实路径> /服务器根目录/` 复制过去

2. **本地curl测试**
   - `curl -s -w "%{http_code}" -o /dev/null http://127.0.0.1:端口/文件名`
   - 得到200 → 文件路径对了，问题在用户那边
   - 得到403/404 → 文件在错误位置

3. **用户仍报403 → 换端口80**
   - 中国ISP经常屏蔽高端口（8888, 8899等）
   - 端口80（HTTP默认端口）几乎全部开放
   - ```bash
     cd /root && python3 -m http.server 80
     ```
   - 链接：`http://IP/文件名`（不需要写端口）

**注意**：给张哥链接后他说403，优先怀疑文件在服务器根目录不存在（最常见原因），其次怀疑端口被ISP拦截。

## 2026-06-16 重大发现：中国GFW/ISP可能彻底封锁印度IP

**场景**：
- 服务器在印度（Hostinger印度机房）
- 先后用端口8888、8899、80、9000启动HTTP服务器，本地测试全部200 ✅
- 张哥在中国访问所有端口都是403 ❌
- 这不是端口问题，是**源IP本身被GFW或中国ISP封锁**

**表现**：
- 本地curl返回200正常
- 用户在中国访问任何端口都返回403
- 换端口无效（80和443也一样）
- 不像是超时/连接失败，而是明确的HTTP 403 Forbidden

**可能的根因**：
1. Hostinger印度IP段被中国GFW加入黑名单（常见于共享主机IP）
2. 中国ISP返回伪造的403页面（常见于流量清洗/安全检测）
3. HTTP明文流量被中间设备拦截

**解决方案（按优先级）**：
1. **换服务器IP** — 向主机商申请换IP，或换到其他机房（如日本/新加坡）
2. **用户通过香港VPN中转** — 张哥本来就用香港VPN上被墙网站，通过VPN访问本服务器可能绕过封锁
3. **通过其他渠道传输** — 但张哥说"不要通过QQ发"（费钱/费流量），所以这条路也堵了
4. **文件拆分成极小分块通过聊天消息发** — 但同样费用户流量

**当前困境**：在服务器IP被封锁的情况下，从印度服务器向中国用户传输大文件没有任何好方案。

## 文件位置检查清单（2026-06-16）

给张哥发下载链接前，自问并验证：
1. ✅ `curl -s http://127.0.0.1:端口/文件名 | head -c 100` → 返回了内容（不是403/404）
2. ✅ 文件已放到服务器启动目录下
3. ✅ 如果端口是8888/8899等，准备一个端口80的备用方案
4. ✅ 给链接时只发一行URL，不要解释怎么用

## 2026-06-07 教训：HTTP服务器根目录不一定是 `/root`

**场景**：
- 用 `cd /tmp && python3 -m http.server 8080` 启动了HTTP服务器
- 视频文件放在 `/root/videos/final.mp4`
- 访问 `http://IP:8080/root/videos/final.mp4` → 404

**原因**：HTTP服务器的根目录是启动时所在的 `cwd`（即 `/tmp`），不是 `/root`

**排查方法**：

```bash
ps aux | grep http
# 看命令行参数里的工作目录

curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8080/path/to/file
# 测试访问
```

**解决**：把文件复制到HTTP服务器的根目录，或者重新启动HTTP服务器时指定正确的目录。

## 注意事项

- `python3 -m http.server 8080` 默认根目录是 `.`（当前目录）
- 如果启动命令是 `cd /tmp && python3 -m http.server 8080`，根目录就是 `/tmp`
- `python3 -m http.server 8080` 默认根目录是 `.`（当前目录）
- 建议启动前先用 `pwd` 确认当前目录

## 后台启动HTTP服务器（2026-06-12）

### ⚠️ 不能用 terminal(command="... &") 方式启动后台进程
```python
# ❌ 错误：Foreground command uses '&' backgrounding
terminal(command="cd /dir && python3 server.py &")

# ✅ 正确：用 background=true 参数
terminal(command="cd /dir && python3 server.py", background=True)
```

### 已知HTTP服务器
- **端口8080**：`python3 -m http.server 8080`，根目录`/tmp/`，已运行
- **端口8888**：`/root/.hermes/webchat/server.py`，需手动启动
  - 启动：`terminal(command="cd /root/.hermes/webchat && python3 server.py", background=True)`
  - 验证：`curl -s -o /dev/null -w "%{http_code}" http://localhost:8888/`

### 安装命令（官网直连，不走GitHub）
```powershell
irm https://hermes-agent.nousresearch.com/install.ps1 | iex
```

### 装到F盘（自定义路径）
```powershell
Invoke-WebRequest -Uri "https://hermes-agent.nousresearch.com/install.ps1" -OutFile "$env:TEMP\install.ps1"
& "$env:TEMP\install.ps1" -HermesHome "F:\hermes" -InstallDir "F:\hermes-agent"
```

### 注意
- 装的是命令行版（PowerShell黑框框），不是窗口界面
- 装完输入 `hermes` 即可聊天
- `raw.githubusercontent.com` 在中国被墙，必须用官网地址
- 官网地址：`hermes-agent.nousresearch.com`

## 2026-06-12 视频制作成功记录

### 视频成功生成
- 脚本 `/root/videos/make_video.py` 重新运行成功
- 关键：**跳过已存在的clip和tts文件**（它们从6月6日就存在且正常）
- 最终视频：`final_video.mp4`（9.5MB，96秒，1280x720，有字幕有配音）
- 复制到 `/tmp/news-broadcast.mp4` 后通过HTTP 200成功访问

### HTTP服务器端口8080验证
- `curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/news-broadcast.mp4` → 200 ✅
- 外部访问：`http://157.173.212.215:8080/news-broadcast.mp4`

### 用户态度
- 张哥对视频制作方向是认可的（"你前面做好的视频还都在呢"）
- 张哥要求：用下载的新闻视频替换mixkit素材，重新制作
- 张哥要求：不要上YouTube/Google，用Yahoo Japan搜索
- 张哥要求：找到能下载任何网页视频的工具（类似以前的迅雷/电驴）
