feat: 排行榜标记 IP 来源(公网 IP + 内网来源 server_ip 双维度,便于调试区分设备)

This commit is contained in:
dsh
2026-08-17 09:57:36 -04:00
parent 7794743828
commit 42dd6813af
4 changed files with 58 additions and 28 deletions
+9 -7
View File
@@ -13,10 +13,11 @@
- ⬇️ **下载测试**: 自适应负载——单轮目标 ~2 秒、阶段最短 5 秒,负载从 1MB 起逐轮翻倍
(上限 400MB),实时仪表盘,取最优值;慢速连接 1-2 轮即结束,快速连接自动加大负载
- ⬆️ **上传测试**: 同样的自适应策略(1MB 起翻倍,上限 256MB),实时仪表盘,取最优值
- 🏆 **排行榜**: 下载 / 上传 / 延迟 三个榜单各取 Top 10,IP 自动打码(保留前 3 段)
- 🏆 **排行榜**: 下载 / 上传 / 延迟 三个榜单各取 Top 10,公网 IP 打码(保留前 3 段)
同时保存并展示**内网来源 IP**(服务器识别,NAT 环境下用于区分同一公网出口下的不同设备,方便站长调试)
- 🌐 **公网 IP 识别**: 服务器位于 NAT 后(公网访问经路由器转发,服务器只能看到内网 IP),
前端通过 ipinfo.io / ipify 探测真实公网出口 IP 用于展示与排行;内网 IP 在排行榜中标注
"内网 / NAT"
"内网"
- 🔒 **Unix socket 监听**: 由 Caddy 反代对外提供 HTTPS,不暴露 TCP 端口
## 项目结构
@@ -109,9 +110,10 @@ speedtest.lmve.net {
| GET | `/api/ping` | 延迟探测(返回 `{"pong":true,"ts":...,"client_ip":...}` |
| GET | `/api/download?size=N` | 下载测速,流式返回 N 字节随机数据(默认 10MB,上限 512MB |
| POST | `/api/upload` | 上传测速,接收请求体并返回 `received/elapsed_s/mbps` |
| POST | `/api/result` | 提交结果 `{latency_ms, jitter_ms, download_mbps, upload_mbps, client_ip?}` |
| GET | `/api/rankings` | 排行榜(`download/upload/latency` 三榜 + `total`,含 `is_private_ip` 标注 |
| POST | `/api/result` | 提交结果 `{latency_ms, jitter_ms, download_mbps, upload_mbps, client_ip?, server_ip?}` |
| GET | `/api/rankings` | 排行榜(`download/upload/latency` 三榜 + `total`,含 `is_private_ip` 与来源 `server_ip` |
客户端真实 IP 优先取前端探测的公网出口 IP(`client_ip` 字段),
否则回退到 Caddy 注入的 `X-Real-IP` / `X-Forwarded-For`
排行榜展示时对 IP 打码保护隐私,NAT/内网 IP 标注"内网 / NAT"
客户端展示 IP 优先取前端探测的公网出口 IP(`client_ip` 字段),
否则回退到 Caddy 注入的 `X-Real-IP``server_ip` 记录服务器看到的来源 IP
(NAT 环境下为内网地址,排行榜中作为"来源"标注,供站长调试区分设备)
公网 IP 打码保护隐私,纯内网记录标注"内网"。