存在原因:
- 一些客户端不支持reality或vision,因此需要回落至其他协议
- 某些VPS线路比较垃圾、或IP已经被墙,需要CDN才能勉强续命
- 同时开启reality的tcp、h2、grpc
缺点:
- 在一个VPS上同时使用reality和其他协议~~,真把墙当傻子是吧~~
中庸解决办法:
- 没有reality或vision的客户端,一律使用套CDN的节点
一、修改NGINX配置
核心思路:
Nginx前置监听443端口,使用SNI分流自己的域名和reality的域名
以www.vmware.com为例,其使用的证书为.vmware.com,因此可以根据SNI实现分流*
stream {
map $ssl_preread_server_name $name {
#只要配置了hostnames才能使用通配符
hostnames;
*.example.com vision;
podcasts.vmware.com reality_h2;
customerconnect.vmware.com reality_grpc;
default reality_tcp;
}
upstream reality_grpc {
server 127.0.0.1:6443;
}
upstream reality_h2 {
server 127.0.0.1:7443;
}
upstream reality_tcp {
server 127.0.0.1:8443;
}
upstream vision {
server 127.0.0.1:2096;
}
server {
listen 443;
listen [::]:443;
proxy_pass $name;
ssl_preread on;
#传递真实IP
#proxy_protocol on;
}
}
注:
- 不配置
hostnames
,可以用~^(.*|)+example\.com$
匹配example.com结尾的所有一级与子域名 - reality+tcp支持回落至h2或grpc的一个,不支持同时回落
二、修改XRAY配置
以下仅在取消注释
proxy_protocol on
时修改!!!!!!!!!
①(tcp)在配置文件中加入"tcpSettings": {"acceptProxyProtocol": true}
{
"network": "tcp",
"tcpSettings": {"acceptProxyProtocol": true},
"security": "reality", //"security": "tls"
…………
}
②(h2和grpc)在配置文件中加入"sockopt": {"acceptProxyProtocol": true}
"streamSettings": {
"network": "h2",
//"network": "grpc",
"sockopt": {"acceptProxyProtocol": true}
}
注:建议将监听地址改为"listen": "127.0.0.1"
四、其他
ssh(sftp)和https共用同一端口【Nginx根据TLS、Alpn、SNI分流】
可以尝试使用ALPN进行分流哦!
评论区