随着Xray的问世,以其兼容vless、vmess、trajon多种模式以及其独特的xtls和fallbacks功能,掀起了一波热潮,我也终于按耐不住,决定把原有的服务替换升级成Xray
目标:保证wordpress和tgbot能够正常运行的情况下,把v2ray替换成Xray
原方案:Nginx使用443端口,通过反代的方式,对v2ray进行反代,使得wordpress、tgbot以及v2ray共用443端口
现方案:Xray使用443端口,通过Xray自身强大的fallbacks功能,通过域名(name)、路径(path)、端口(dest)进行分流和回落,保证wordpress和tgbot能够正常使用
下面记录一下实现的过程以及踩过的坑
卸载v2ray
停用并关闭服务
systemctl stop v2ray
systemctl disable v2ray
#删除文件
rm -rf /etc/v2ray/* #(配置文件)
rm -rf /usr/bin/v2ray/* #(程序)
rm -rf /var/log/v2ray/* #(日志)
rm -rf /lib/systemd/system/v2ray.service #(systemd 启动项)
rm -rf /etc/init.d/v2ray #(sysv 启动项)
安装Xray
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install -u root
Xray配置文件
找到/usr/local/etc/xray/config.json
并编辑
{
"log": {
"loglevel": "debug",
"access": "/var/log/xray/access.log",
"error": "/var/log/xray/error.log"
},
"inbounds": [
{
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "68b0fb83-4574-4204-8856-64c248715c97", // 填写你的 UUID
"flow": "xtls-rprx-direct",
"level": 0,
"email": "love@example.com"// 随意填写
}
],
"decryption": "none",
"fallbacks": [
{
"dest": 8080, // 默认回落到nginx(nginx配置处需要与其一致)
"xver": 1
},
{
"name": "tgbot.banana-zone.tk", // 使用Xray的SNI功能按域名分流,才能保证tgbot的正常使用
"dest": 8081,
"xver": 1
},
{
"path": "/rayy", // 必须换成自定义的 PATH(vless+ws)
"dest": 11024,
"xver": 1
},
{
"path": "/ray", // 必须换成自定义的 PATH(vmess+ws)
"dest": 10000,
"xver": 1
}
]
},
"streamSettings": {
"network": "tcp",
"security": "xtls",
"xtlsSettings": {
"alpn": [
"http/1.1"
],
"certificates": [
{
"certificateFile": "/root/ssl2/banana-zone.tk.fullchain.cer",
"keyFile": "/root/ssl2/banana-zone.tk.key"
}
]
}
}
},
{
"port": 11024,
"listen": "127.0.0.1",
"protocol": "vless",
"settings": {
"clients": [
{
"id": "68b0fb83-4574-4204-8856-64c248715c97", // 填写你的 UUID
"level": 0,
"email": "love@example.com"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"acceptProxyProtocol": true,
"path": "/rayy" // 必须换成自定义的 PATH,需要和分流的一致
}
}
},
{
"port": 10000,
"listen": "127.0.0.1",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "68b0fb83-4574-4204-8856-64c248715c97", // 填写你的 UUID
"level": 0,
"email": "love@example.com"
}
]
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"acceptProxyProtocol": true, // 提醒:若你用 Nginx/Caddy 等反代 WS,需要删掉这行
"path": "/ray" // 必须换成自定义的 PATH,需要和分流的一致
}
}
}
],
"outbounds": [
{
"protocol": "freedom"
}
]
}
**其实,通俗的讲就是xray监听服务器443端口,也就是所有经过443端口的流量首先会经过xray,按照上面的配置看,如果符合vless协议的就继续,再通过path来细分到底是走哪种协议(vless+ws/vmess+ws),如果不符合的就转到8080端口,nginx同样配置8080端口,那么这些流量就给到nginx来处理了。
这里特别说一下Xray的SNI。原本我的想法是在fallbacks处添加两个回落端口,如8080,8081(就是不符合规则的流量都进入到这两个端口),然后在nginx配置同样配置8080,8081,然后让nginx通过server name来区别博客和tgbot。但是后面发现根部不可行,浏览器直接输入tgbot.example.com会直接跳转到example.com,也就是直接进入到博客了,而没有转到tgbot服务上面。最终看了官方给出的解决办法,采用目前最优的一种——Xray 监听 443 端口,通过 Fallbacks 功能 SNI 分流将网站流量回落到 Nginx 或 Caddy
。后面继续补充该方法的实现过程**
Nginx配置文件
首先我并没有完全按照官方的教程来
Nginx需要安装http_realip_module
模块
博客配置
server {
listen 80;
server_name banana-zone.tk;##你的域名
rewrite ^(.*)$ https://$host$1 permanent; ##这句是强制HTTP跳转HTTPS
}
server
{
listen 127.0.0.1:8080 proxy_protocol default_server;
server_name banana-zone.tk;##你的域名
index index.html index.htm index.php;
root /home/wwwroot/default;
add_header Content-Security-Policy "upgrade-insecure-requests";##重要——修复wordpress样式问题
add_header Strict-Transport-Security "max-age=63072000" always;##重要
include enable-php.conf;
location / {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
location /nginx_status
{
stub_status on;
access_log off;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf){
expires 30d;
}
location ~ .*\.(js|css)?
{
expires 12h;
}
location ~ /.well-known {
allow all;
}
location ~ /\.
{
deny all;
}
access_log /root/1access.log;
error_log /root/1error.log debug;
}
tgbot配置
#添加这两句
set_real_ip_from 127.0.0.1;
real_ip_header proxy_protocol;
#添加这两句
server {
listen 80;
server_name tgbot.banana-zone.tk;##你的域名
rewrite ^(.*)$ https://$host$1 permanent; ##这句是强制HTTP跳转HTTPS
}
server {
listen 127.0.0.1:8081 proxy_protocol;
server_name tgbot.banana-zone.tk;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_ssl_server_name on;
add_header Content-Security-Policy "upgrade-insecure-requests";##重要
add_header Strict-Transport-Security "max-age=63072000" always;##重要
location / {
proxy_pass https://127.0.0.1:8443;
}
access_log /root/tg.log;
error_log /root/tg.error.log;
}
补充说明一下,域名证书需要使用泛域名证书才行,因为Xray、Nginx和tgbot都是共用一个域名证书的
各模式优劣势说明
- VMESS,最普通的V2ray服务器
- VMESS+KCP,传输协议使用mKCP,VPS线路不好时可能有奇效(没试过)
- VMESS+TCP+TLS,带伪装的V2ray,可用CDN
- VMESS+WS+TLS,即最通用的V2ray伪装方式,可用CDN,推荐使用
- VLESS+KCP,传输协议使用mKCP
- VLESS+TCP+TLS,通用的VLESS版本,可用CDN,比VMESS+TCP+TLS方式性能更好
- VLESS+WS+TLS,能过CDN中转,有过CDN情况下推荐使用
- VLESS+TCP+XTLS,目前最强悍的VLESS+XTLS组合,强力推荐使用(但是支持的客户端少一些)
- trojan,轻量级的伪装协议
- trojan+XTLS,trojan加强版,使用XTLS技术提升性能
Comments | NOTHING