Xray Xhttp 五合一的配置
xhttp 五合一的配置,在同一台 VPS 的 443 端口实现了:XTLS(Vision)+Reality 直连, xhttp+Reality 直连, 上行 xhttp+TLS+CDN | 下行 xhttp+Reality (上下行不同SNI), xhttp+TLS 过CDN ,上行 xhttp+Reality | 下行 xhttp+TLS+CDN (上下行不同SNI)
原文
https://github.com/XTLS/Xray-core/discussions/4118
xhttp 五合一的配置,在同一台 VPS 的 443 端口实现了:
- XTLS(Vision)+Reality 直连
- xhttp+Reality 直连
- 上行 xhttp+TLS+CDN | 下行 xhttp+Reality (上下行不同SNI)
- xhttp+TLS 过CDN
- 上行 xhttp+Reality | 下行 xhttp+TLS+CDN (上下行不同SNI)
如果不需要这么复杂的组合
https://github.com/XTLS/Xray-core/discussions/4118#discussioncomment-11593313
假设 reality 直连的域名是 a.yourdomain.com,过 CDN 的域名是 b.yourdomain.com。
(注:双端 xray-core 的版本不能低于 v24.12.15 )
说明:
- xhttp+Reality 上下行均为 h2;
- xhttpSettings 中的 "extra": {} 里的配置项 默认参数在大多数场景下是最优的,如果觉得繁琐,可以删掉整个 "extra": {},然后你会发现 xhttp 其实只需要配置 host、path、mode,与大家熟悉的 ws/httpupgrade 一样简单,而且客户端还不需要在 path 后面加 ?ed=2560 ;
- xhttp+TLS+CDN 与 xhttp+Reality 建议使用不同的 SNI;
- xhttp 上下行分离指的是用户数据的上传与下载分离,但TLS握手永远是双向的,所以“上行 xhttp+TLS+CDN | 下行 xhttp+Reality ”不能拯救被墙 IP,因为 xhttp+Reality 过不了 CDN;如果 VPS 的 IP 被墙,只能采用 上下行均为 xhttp+TLS+CDN 的方式;
- 当服务端 nginx 版本不低于 1.25 时,nginx 可监听 UDP 端口,此时 xhttp+TLS 直连可实现 h3 (Reality 的target 需设置为 nginx 监听的端口而不是 UDS);
- Nginx 使用 grpc_pass 反代 xhttp 时 不支持 http/1.1,如果要支持,请使用 proxy_pass(建议舍弃 http/1.1,因为 grpc_pass 性能更好);
- 使用 Cloudflare 的CDN 时,请检查你的缓存规则,确保 b.yourdomain.com/xhttp_client_upload 不会被缓存;
- 丢包率超过 5% 的线路,可以适当降低 maxConcurrency 的数值,比如设为 "8-16"
几种代理方式可能的使用场景:
XTLS+Reality
- ① 客户端 GUI 不支持 xhttp;
- ② 不想开启 TCP 多路复用;
- ③ 想要尽可能低的延迟与尽可能高的上下行速度
上下行均为 xhttp+Reality
- ① VPS 去程和回程的线路都比较好;
- ② 想要尽可能低的延迟与尽可能高的上下行速度
上行 xhttp+TLS+CDN | 下行 xhttp+Reality
- ① 去程(客户端→VPS)线路较差,回程(VPS→客户端)线路较好;
- ② 日常使用更偏重下载,很少上传
上下行均为 xhttp+TLS+CDN
- ① VPS 去程和回程的线路都很差;
- ② 不希望 VPS 的 IP 暴露在公网;
- ③ VPS 的 IP 已被墙
上行 xhttp+Reality | 下行 xhttp+TLS+CDN
- ① 去程(客户端→VPS)线路较好,回程(VPS→客户端)线路较差;
- ② 日常使用更偏重上传,很少下载
xhttp 上传模式
Reality | TLS alpn | 上下行分离 | 上传模式 |
---|---|---|---|
是 | - | 是 | stream-up |
- | 否 | stream-one | |
否 | h3 | 是 | packet-up |
否 | packet-up | ||
h2 | 是 | stream-up | |
否 | stream-one | ||
http/1.1 | 是 | packet-up | |
否 | packet-up |
理论上 packet-up 性能弱于 stream-up/one,但经过R佬的不断优化,packet-up 性能已经改善许多,非常接近 stream-up/one 。
如果没有上下行分离的需求,强烈建议选择 stream-one 模式,可解决访问某些网站的断流问题:
xhttp+reality,客户端 mode 填 "auto" 或 "stream-one" 效果相同;
xhttp+TLS,客户端 mode 填 "auto" 时, 会在 "stream-one" 和 "stream-up" 中自动选择,但往往会选择 "stream-up",所以建议客户端 mode 填 "stream-one"。
目前 Cloudflare 完美支持 stream-one 模式,其他 CDN 有待测试。