众所周知,gRPC 建立于 HTTP/2 之上,并且内置了多路复用(MUX)机制,因此,gRPC能够最大限度的降低连接延迟,同时单条连接性能也得到了极大的提升。
需要注意,如果您想通过在 Xray-core 部署 gRPC 来获得显著的体验提升,需要一条质量较好的线路作为支撑。如果您的 VPS 线路状况不够理想,我们不建议在其上部署 gRPC 服务。
本案例中,我们同样选择使用 Nginx 作为前置反向代理(同时处理 TLS 连接) 转发请求给Xray-core。
另外,根据一些用户的使用体验,通过 gRPC 连接 Xray 时常有断流现象的发生,乃至于需要在客户端操作重新连接服务,较为繁琐。本文针对此类现象,对 Nginx 配置进行了优化,经过测试能够避免断流现象的发生。
Xray-core 配置(config.json)
{
"log": {
"loglevel": "warning",
"error": "/var/log/xray/error.log"
},
"inbounds": [
{
"listen": "/dev/shm/xray_grpc.sock,666",
"protocol": "vless",
"settings": {
"clients": [
{
"id": "XXXX-XXXX-XXXX-XXXX-XXX",
"level": 0,
"email": "[email protected]"
}
],
"decryption":"none"
},
"streamSettings": {
"network": "grpc",
"security": "none",
"grpcSettings": {
"serviceName": "xxxxxx"
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "direct"
},
{
"protocol": "blackhole",
"tag": "block"
}
]
}
注意,上述 "id"
及 "serviceName"
配置参数值请根据实际需求进行修改。诸如针对特定国家及地区的服务屏蔽以及针对 IPV4、IPV6的分流方案,一些注意事项。
Nginx 配置
请在 Nginx 配置文件 nginx.conf 中 http 部分末尾添加如下配置:
upstream GRPC {
server unix:/dev/shm/xray_grpc.sock;
keepalive 500;
keepalive_timeout 7d;
keepalive_requests 100000;
}
在 sites-availabe 目录站点配置文件 default 或对应文件 server 部分添加以下配置:
location /xxxxxx {
if ($content_type !~ "application/grpc") {
return 404;
}
if ($request_method != "POST") {
return 404;
}
grpc_set_header Connection "";
client_body_timeout 300s;
client_max_body_size 0;
client_body_buffer_size 8k;
grpc_connect_timeout 10s;
proxy_buffering off;
#grpc_buffer_size 100m;
grpc_read_timeout 1d;
grpc_send_timeout 1d;
grpc_socket_keepalive on;
grpc_pass grpc://GRPC;
grpc_set_header X-Real-IP $remote_addr;
grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
注意,location /xxxxxx
请根据实际需求设定,必须与上文中 Xray-core 配置中 “serviceName” 参数值保持一致。
Nginx 完整配置以及性能、安全性优化。请见这里,您可以选择同时配置 vless-tls-ws 及 vless-gRPC 服务,根据具体使用场景选择性使用,相较而言,vless-tls-ws 方案具有更高的稳定性,而 gRPC 则具备较小的数据延迟特性。
最后,需要指出的是,此两类方案同时支持通过 CloudFlare CDN 进行转发。在配置使用 CloudFlare 进行中转时,不要忘记打开其“网络”设置菜单中的 WebSocket 以及 gRPC 开关。