XHTTP 上下行分离教程:两套方案(Cloudflare+CloudFront / 纯 CloudFront)

WebSocket 快被 Xray 内核标记废弃了,现在过 CDN 主流用 XHTTP。这篇讲它一个实用特性——上下行分离:上行和下行各走一条线路,把两边的长处占上。

下面给两套方案,各自独立、照着做就行:

  • 方案一:上行 Cloudflare + 下行 CloudFront。
  • 方案二:全程只用 CloudFront(上行免费套餐 + 下行按量),不碰 Cloudflare,步骤更省。

先说共同的原理和准备,再分开讲。

原理

你的设备 ──上行──▶ 源站(你的 VPS + Xray)
   ▲                    │
   └──────下行◀─────────┘

客户端同时连上行和下行:请求经上行到源站,数据从下行拉回来。服务端只要一个 XHTTP 入站,分离靠客户端的 downloadSettings 完成。所谓”上行”是你把数据传到 CDN、再由 CDN 回源到你的服务器,对 AWS 来说这段是免费的——这也是能白嫖不出账单的原因。

准备工作(两套通用)

  1. 一个 AWS 账号(开 CloudFront)。注册要张信用卡,虚拟卡也行;新号一般有 200 刀赠金,就算偶尔扣费也先扣赠金,不用太紧张。
  2. 一台 VPS 当源站。
  3. 一个域名。方案一需要托管在 Cloudflare;方案二用来给节点签证书即可。

注册 AWS 有个坑:用虚拟卡(比如 Bybit 的卡)时,注册地区要和你的出口 IP 地区一致,否则容易触发风控。

搭节点(两套通用,3X-UI)

VPS 上装节点。可选先装 BBR(脚本 https://github.com/byJoey/Actions-bbr-v3 )。面板用 3X-UI(https://github.com/MHSanaei/3x-ui )。

先申请证书:跑面板脚本选申请证书,它让你输域名时先别急着输——去 DNS 把域名解析到服务器 IP,解析生效后再输、端口默认 80、等签发。

签好后加入站:

  • 传输选 XHTTP,mode 选 stream-up
  • path 后面一定要带斜杠,比如 `/abc/`。不加斜杠连不上,这是重灾区,务必注意。
  • 安全选 TLS(过 CDN 没法用 reality),证书选「从面板获取」。
  • 加一个客户端(UUID)。

先测直连通不通。通常通,但延迟偏高——这正是要解决的。


方案一:上行 Cloudflare + 下行 CloudFront

这套上行走 Cloudflare(免费、上传稳),下行走 CloudFront(下载不限速)。多数人搭完连不通,问题都出在 Cloudflare 这边。

Cloudflare 侧

1. SSL/TLS 模式必须改成「完整」

到域名的 SSL/TLS → 概述,加密模式必须是「完整」(Full),灵活、完全严格都不行,不对就直接握手失败。

2. 开启「允许通过 gRPC 连接到源站」

同页面往下到「网络」,把「允许通过 gRPC 连接到您的源站」打开,和下面 CloudFront 的 gRPC 配套,不开不通。

3. 上行入口 + 端口重写

  • 加一条 A 记录指向服务器 IP 当上行入口(可开橙云代理)。
  • 建一条规则:主机名等于这个上行域名时,回源端口重写到节点的实际端口

CloudFront 侧(下行)

进 AWS 控制台搜 CloudFront,创建分发:

  1. 源域名填节点域名,端口改成节点实际端口,源协议选 HTTPS(入站用了 TLS,回源就得走 HTTPS,明文 HTTP 回源会握手失败)。
  2. 缓存步骤启用 gRPC(必须,不开不通),缓存策略选关缓存(CachingDisabled)。
  3. 压缩对象关掉。建好后记下分配的 `dxxxx.cloudfront.net`。

生成配置

用工具 https://joeyblog.net/xhttp.html (打开先刷新一次):上行填 Cloudflare 域名、下行填 CloudFront 域名,下行 mode 选「跟随上行」,点生成。往下看”生成配置”一节。


方案二:全程只用 CloudFront(更省事)

上一套要配 Cloudflare。这套把上行也换成 CloudFront 的 100G 免费套餐,下行走 CloudFront 按量付费,全程不碰 Cloudflare,步骤简单不少。上行的 100G 免费额度能保证不出账单。

建两个 CloudFront 分发

上行分发(免费套餐):

  1. 创建分发时选免费套餐那个选项。
  2. 源域名填节点域名,端口改成节点实际端口,源协议选 HTTPS(入站是 TLS,回源必须 HTTPS)。
  3. 缓存步骤启用 gRPC(必须),缓存策略关缓存
  4. 免费套餐没法关 WAF,直接下一步。
  5. 行为里把压缩对象关掉。

下行分发(按量付费):

步骤基本一样:域名、端口、启用 gRPC、关缓存都照做。区别是这档要把 WAF 关掉(不关可能产生费用),压缩对象也关掉。

建完你会有两个分发:一个免费(上行)、一个按量(下行),各自有一个 `dxxxx.cloudfront.net` 域名。

为什么必须开 gRPC:CloudFront 默认会缓冲整个请求体,XHTTP 的 stream-up 长连接会被卡住。开了 gRPC,CloudFront 走双向流式转发、不缓冲,stream-up 才能跑。这是 TLS + 过 CloudFront 最容易踩的坑。

生成配置

上行地址填免费套餐那个分发的域名、端口 443;下行地址填按量付费那个分发的域名。其余同下。


生成客户端配置(两套通用)

不用手写 JSON,用工具:https://joeyblog.net/xhttp.html

打开后先刷新一次页面(有 CDN 缓存),然后:

  1. 上行地址:方案一填 Cloudflare 域名、方案二填免费套餐分发域名,端口 443,host 和 SNI 都填。
  2. 下行地址:CloudFront(方案二是按量付费那个)分配的域名。
  3. 下行 mode 和入站一致,选「跟随上行」即可。
  4. 点「生成配置」。

工具会同时给出 Xray JSONv2rayN完整配置,以及小火箭链接 / v2rayN 链接

  • 小火箭:复制「小火箭链接」,App 自动识别。
  • v2rayN:用「v2rayN 链接」直接导入;或复制「v2rayN」那段扁平 JSON,粘进 v2rayN 服务器设置里的 XHTTP Extra 框(地址/端口/UUID/TLS/SNI 在界面各自填)。
  • 手搓:复制「完整配置」丢进 Xray 内核。

关于优选:如果速度慢,多半是需要优选。前提是 host 已经填好,然后把上行/下行地址换成优选域名即可;工具里也能直接用网页优选。优选只改”连到哪台机器”,握手 SNI 还是用真实域名。

两个变体玩法

如果你的服务器上行本身不错(比如移动/联通/电信的”快乐机”,晚高峰下载拉胯但上传和延迟还行),可以:

  • 上行走服务器直连:复制一份配置,把上行域名改回你的服务器地址、端口改成节点端口。适合嫌 100G 上行不够用、且服务器上行给力的情况。
  • 下行走服务器直连:同理,把下行字段改成服务器地址。

举一反三,上行下行哪条走 CDN、哪条走直连,按你的线路情况自由组合。

测速 + 费用

延迟能压到 50ms 出头,YouTube 4K 秒开、拽进度条几乎不加载,跑到三十几万码率没问题。费用上,上下行分离这套实测下来是免费的(上行走 CloudFront 免费额度、下行 AWS 这段不计上行费)。就算配置不当偶尔扣费,也先扣账户里的 200 刀赠金,不用太担心。

连不通先查这几样

  • 方案一:Cloudflare 的 SSL/TLS 是不是「完整」、gRPC 开没开、端口有没有重写。
  • 方案二:CloudFront 每个分发的 gRPC 有没有启用。
  • 两套通用:path 后面有没有加斜杠、下行 mode 和入站一致没有。

一键脚本还在筹备,但更建议你先手动搭一遍,至少搞懂它是怎么回事。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇