升级:从 WebSocket 迁移到 XHTTP 传输层
上一章我们搭建了 VLESS + WebSocket + TLS + CDN 的完整方案。本章将传输层从 WebSocket 升级为 XHTTP——Xray 官方推荐的下一代传输协议。
为什么要从 WebSocket 迁移
Xray 从 2026 年起已将 WebSocket 标记为废弃(deprecated),官方明确建议迁移到 XHTTP。启动时你会看到这个警告:
你可以用以下命令检测自己的配置是否有这个警告:
这意味着 WebSocket 未来某个版本会被移除。趁现在迁移,避免以后被动。
XHTTP vs WebSocket 对比
| 对比维度 | WebSocket | XHTTP |
|---|---|---|
| 协议基础 | HTTP/1.1 Upgrade | 标准 HTTP POST/GET 流式传输 |
| 连接模型 | 单个长连接,全双工 | 多路复用,基于标准 HTTP 语义 |
| CDN 兼容性 | 需要 CDN 显式支持 WebSocket | 天然兼容(就是普通 HTTP 请求) |
| 被识别风险 | WebSocket 升级握手有明显特征 | 看起来就是普通的 HTTP 流量 |
| Nginx 配置 | 需要 Upgrade/Connection 头 | 不需要,标准反代即可 |
| 性能 | 良好 | 更好(减少握手开销) |
| 客户端支持 | 所有客户端都支持 | v2rayN/v2rayNG/sing-box 支持,Clash 系暂不支持 |
| Xray 状态 | ⚠️ 已废弃 | ✅ 官方推荐 |
XHTTP 的核心优势
1. 更隐蔽
WebSocket 有明显的协议升级特征——Connection: Upgrade + Upgrade: websocket 这两个头在 DPI 面前很容易被识别。XHTTP 使用标准 HTTP 请求,和你浏览网页的流量完全一样。
2. 更好的 CDN 兼容性
WebSocket 需要 CDN 明确支持(Cloudflare 免费版有连接数和时长限制)。XHTTP 本质就是 HTTP 请求,任何支持 HTTP 的 CDN 都能透传,不需要特殊配置。
3. 更简单的服务端配置
Nginx 不需要处理 WebSocket 升级,只做普通的 HTTP 反向代理,配置更简洁,出问题的概率更低。
客户端兼容性注意:截至 2026 年 5 月,Clash Verge Rev(mihomo 内核)尚不支持 XHTTP。如果你用的是 Clash 系客户端,暂时只能继续用 WebSocket。v2rayN、v2rayNG、sing-box 已完整支持。
迁移步骤
如果你已经完成第三章的 WebSocket 部署,迁移只需改三个地方。
第一步:修改 Xray 配置
把 streamSettings 部分从:
改为:
变化:
"network": "ws"→"network": "xhttp""wsSettings"→"xhttpSettings"
路径保持不变。
第二步:修改 Nginx 配置
把代理路径的 location 块从:
改为:
变化:
- 删掉
proxy_set_header Upgrade $http_upgrade; - 删掉
proxy_set_header Connection "upgrade"; - 新增
proxy_buffering off;
为什么这样改:
| 改动 | 原因 |
|---|---|
| 去掉 Upgrade/Connection | XHTTP 不走 WebSocket 升级,不需要这两个头 |
| 加 proxy_buffering off | XHTTP 用流式传输,Nginx 不能缓冲响应(否则数据会卡住) |
第三步:重启服务
验证 Xray 启动无报错:
如果输出 Configuration OK. 且没有 WebSocket deprecated 警告,迁移成功。
客户端配置
v2rayN(推荐)
分享链接格式(直接导入):
在 v2rayN 中:服务器 → 从剪贴板导入批量 URL → 粘贴链接。
手动配置:
| 参数 | 值 |
|---|---|
| 地址 | proxy.example.com |
| 端口 | 443 |
| UUID | 你的 UUID |
| 加密 | none |
| 传输协议 | xhttp |
| 路径 | /你的随机路径 |
| TLS | 开启 |
| SNI | proxy.example.com |
| 跳过证书验证 | 否 |
v2rayNG(Android)
和 v2rayN 一样,直接导入分享链接即可。
Clash 系客户端(暂不支持)
如果你同时使用 Clash Verge Rev 等客户端,可以在 Xray 配置中同时保留两个入站——一个 XHTTP(给 v2rayN 用),一个 WS(给 Clash 用):
Nginx 中为两个路径分别配置对应的 location 块即可。
验证迁移成功
从零搭建(不走 WebSocket)
如果你是直接看这一章,没有走第三章的 WebSocket 流程,以下是完整的 XHTTP 配置(不经过 WS 阶段)。
Xray 完整配置
Nginx 完整配置
小结
本章完成了从 WebSocket 到 XHTTP 的传输层升级:
| 项目 | 改动 |
|---|---|
| Xray | ws → xhttp,wsSettings → xhttpSettings |
| Nginx | 去掉 WebSocket 升级头,加 proxy_buffering off |
| 客户端 | v2rayN 用 XHTTP 链接导入 |
迁移后的效果:
- ✅ 消除了 Xray 的废弃警告
- ✅ 流量更像普通 HTTP(无 WebSocket 升级特征)
- ✅ Nginx 配置更简洁
- ✅ 未来版本兼容性有保障
下一章将深入解析 VLESS + Reality 的工作原理——如何借用大站 TLS 证书实现完美伪装,第六章则给出完整实操步骤。