最近摸索了下使用Nginx反代Xray Reality加密,记录如下:

1、规划好使用的端口,默认Nginx通过HTTP模块监听80、443端口,现在我们需要将443端口使用Stream模块来监听,本次案例规划如下:

端口 监听程序 用途
80,8443 Nginx HTTP模块监听端口,提供正常的网站服务
443 Nginx Stream模块监听端口,进行分流
7443 Xray Xray Reality协议监听端口

2、进行Stream分类配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
stream {
map $ssl_preread_server_name $backend_name {
伪装网站域名 reality_backend;
default web_backend;
}
upstream reality_backend {
server 127.0.0.1:7443;
}
upstream web_backend {
server 127.0.0.1:8443;
}
server {
listen 443;
ssl_preread on;
proxy_pass $backend_name;
proxy_protocol on;
}
}

3、照常配置Reality,重点是传输层一定要允许接收代理协议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
"listen": "127.0.0.1",
"port": 7443,
"protocol": "vless",
"settings": {
"clients": [
{
"email": "自己填",
"flow": "xtls-rprx-vision",
"id": "自己填"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"realitySettings": {
"dest": "8443",
"privateKey": "自己填",
"serverNames": [
"伪装网站域名"
],
"shortIds": [
"自己填"
]
},
"security": "reality",
"tcpSettings": {
"acceptProxyProtocol": true
}
}
}

4、正常配置伪装网站及SSL证书,以下只是个样例

1
2
3
4
5
6
server {
listen 127.0.0.1:8443 ssl;
server_name 伪装网站域名;
ssl_certificate 伪装网站域名证书位置;
ssl_certificate_key 伪装网站域名私钥位置;
}

自此可以正常访问伪装网站,Xray Reality也能正常连接使用

这是Nginx反代Reality最基础的配置,在此基础上可以尽情自由发挥了