在研究完Nginx反代Xray之后,开始尝试使用Xray来反代Nginx,经过一番尝试后成功
主要就是利用Xray的Reality的特性,即Reality认证不成功会进行流量的转发,那么只要设置转发到本地Nginx监听端口就天然实现了反代

1、在实现前,照例先进行端口规划,默认Nginx通过HTTP模块监听80、443端口,修改为80、8443,把443端口交给Xray来进行监听,本次案例规划如下:

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

2、进行Xray的设置

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
33
34
35
{
"listen": null,
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"email": "自己填",
"flow": "xtls-rprx-vision",
"id": "自己填"
}
],
"decryption": "none",
"fallbacks": []
},
"streamSettings": {
"network": "tcp",
"realitySettings": {
"dest": "8443",
"privateKey": "自己填",
"serverNames": [
"伪装网站域名"
],
"shortIds": [
"自己填"
],
"show": false,
"xver": 0
},
"security": "reality",
"tcpSettings": {
"acceptProxyProtocol": false
}
}
}

3、Nginx照常设置,只需要记得Nginx的网站中需包含伪装网站,各个网站HTTPS监听8443端口即可

4、自此可以正常使用Reality,并访问Nginx上的网站了


经过以上设置,各个网站日志中,访问者都是127.0.0.1,如果想获取访问者真实地址的话,需要做两处修改

1、Xray中的xver值设置为1或者2

2、Nginx配置文件中对应网站的server部分修改如下:

1
2
3
listen 8443 ssl http2 proxy_protocol; 
set_real_ip_from 127.0.0.1;
real_ip_header proxy_protocol;