为了实现目标,你需要准备:

  • 一台 VPS(云服务器)。内存建议至少 1GB,地区香港新加坡最佳, 日本韩国次之,如果线路好的话欧美地区也不是不可以

  • 一个域名,如果想要和教程完全一致,可以修改域名的 Nameserver 为 Cloudflare,不修改也没关系

  • 一些基础的 Linux 服务器知识,你至少需要懂得如何使用 SSH 工具连接服务器(SSH 工具可以使用简单易用的 FinalShell

安装 3x-ui 控制面板

3x-ui 是一个由社区积极维护和更新的多协议网络代理面板,可以看作是已停止维护的 x-ui 的升级版,它不仅继承了 x-ui 易于使用和支持多种代理协议的优点,还在安全性、功能性和社区支持方面进行了显著的增强,是搭建和管理个人或多用户代理服务器的更可靠和推荐的选择。

使用一键脚本进行安装:

bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

推荐:通过Docker安装

  • 克隆仓库:

git clone https://github.com/MHSanaei/3x-ui.git
cd 3x-ui
  • 运行服务:

docker compose up -d

或者

docker run -itd \
   -e XRAY_VMESS_AEAD_FORCED=false \
   -v $PWD/db/:/etc/x-ui/ \
   -v $PWD/cert/:/root/cert/ \
   --network=host \
   --restart=unless-stopped \
   --name 3x-ui \
   ghcr.io/mhsanaei/3x-ui:latest

配置 3x-ui

在浏览器地址栏中输入 服务器IP:2053 进入 3x-ui 面板。默认账号密码为:admin/admin,登入 3x-ui 面板。面板界面如下:

第一次进入建议修改用户名和密码

Nginx反代实现 3x-ui 面板和网站共存

更改3X-ui管理后缀

注意更改根路径后需要重启面板

Nginx设置

我使用的是1Panel面板,在网站-->网站 中进行反代设置

点击列表中的文件夹小图标打开网站目录,选择 proxy 文件夹,打开 root.conf 文件

root.conf填入以下内容:

location ^~ /X-UI/ {
    proxy_pass http://127.0.0.1:2053/X-UI/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}


location / {
    proxy_pass https://repo1.maven.org/; #伪装网址
    proxy_redirect off;
    proxy_ssl_server_name on;
    sub_filter_once off;
    sub_filter "repo1.maven.org" $server_name;
    proxy_set_header Host "repo1.maven.org";
    proxy_set_header Referer $http_referer;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header User-Agent $http_user_agent;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Accept-Encoding "";
    proxy_set_header Accept-Language "zh-CN";
}


注意端口和路径要与3X-UI的设置一致

/X-ui前面需要加^~设置为正则匹配,要不会和默认的js缓存规则冲突导致X-UI后台js文件全部404,后台一片空白。

设置完毕以后,在1Panel面板里面重载配置,然后重新启动 Nginx,配置生效。至此,你可以使用 https://ip/X-UI/ 来访问你的 Xray 管理面板了后续注意:这样设置会使X-ui后台的二维码和分享链接无法直接使用,导入后必须手动服务器地址为你的域名或者IP,更改端口为443,开启TLS并填入你的域名及path。后续可以通过IP:54321/path 或 https://域名/path 访问X-ui后台,建议可以把54321端口用防火墙封禁掉只通过域名HTTPS访问,

使用 3x-ui 搭建节点

在3X-UI左侧选择 入站列表,选择 添加入站(其实就是新建节点的意思)。各设置项按如下设置:

  1. 备注即为节点名。

  2. 协议改为 vmess

  3. 监听修改为 127.0.0.1 或者 localhost

  4. 端口号随便设置为 22161,后面会用

  5. 传输设置为 WebScoket

  6. 复制「客户」中随机生成的「电子邮件」,并复制到「小路」中,前面不要忘了加上斜杠。记住这个生成的路径,后面会用到

  7. 其余项均设置为默认即可

各设置项如下图所示:

使用反向代理隐藏节点

点击列表中的文件夹小图标打开网站目录,选择 proxy 文件夹,打开 root.conf 文件,填入以下内容:

location /awaekmzc {   #分流路径
    proxy_redirect off;
    proxy_pass http://localhost:22161; #入站端口
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

对以上配置文件的解释:

  1. 分流路径需要修改为刚刚创建节点时填写的 小路,也就是说只有该路径下的请求会被分流到我们搭建的节点上

  2. 平时在浏览器中输入 free.你购买的域名.域名后缀,会跳转到一个伪装站点上。这个伪装站点是 Maven 的中央仓库,满足大流量的特征。你也可以填写其他的网站,只要满足大流量的特征即可。

连接节点

打开 3x-ui 的面板,导出创建好的节点的链接,如下图:

在小火箭中,端口号填写 443,加密方式建议选择 zero,效率更高(因为加密的工作已经在传输层由 TLS 帮我们完成了,就不需要二次加密了),传输层安全选择 TLS,其余默认。

补充说明

  1. 节点搭建完成后,如果有防火墙的话建议关闭 3x-ui 面板的端口,避免被爆破攻击,可以只保留 80 443 和服务器的 SSH 登录端口

  2. 可以使用订阅转换工具,生成适用于包括 Clash、Shadowrocket 在内的,各种客户端的订阅链接

  3. 如果机器的内存太小(例如低于 512M),由于 1Panel 会占用大概两三百 MB 的内存,所以此时我不建议安装 1Panel 面板,建议按照不良林的视频,只安装 Nginx 和 x-ui 面板,并用 acme.sh 申请证书

  4. 相比同样使用伪装站点的 Trojan 协议,为什么这种搭建方式还要更稳定一些?因为我们选择的 WebServer 是 Nginx,而不是 Trojan 的内置 WebServer。Nginx 是市场份额第一的 WebServer,因此我们搭建的节点对于墙来说特征更小,更像一个正常的资源网站。

Update: 如何为节点套上 CDN?

CDN 全称为 Content Delivery Network,也就是「内容分发网络」的意思。简单地讲,其原理相当于在本地网络和服务器之间架设一些中转服务器,静态资源可以缓存在中转服务器上减少源站压力,动态资源也可以经由中转服务器起到加速的作用,我们为节点套 CDN 主要是利用了后者的特性。

由于我们底层使用了 WebSocket 传输协议,所以理论上是可以套 CDN 的。

当然,前提是 CDN 厂商支持 WebSocket 协议,常见的支持 WebSocket 的 CDN 厂商有 Cloudflare(完全免费但是基础订阅线路一般),Amazon Cloudfront(收费,但是每个月好像有 1TB 的免费额度)。

以下以 Cloudflare 为例,Cloudflare 启用 CDN 非常简单且优雅,直接打开 DNS 解析设置页,为解析记录启用「小黄云」就可以了。

浏览器访问设置的伪装域名也一直出现「页面重定向次数过多」的报错。原因如下:

访问HTTP自动跳转到HTTPS与CF上的安全性产生了冲突

解决方案

  • 将 1Panel 中的 HTTP 选项从「HTTP 跳转到 HTTPS」改为「禁止 HTTP」

  • 或者,将 Cloudflare 中的 SSL/TLS encryption mode 改为更高级的 完全 或者 完全(严格)

当服务器的 IP 被墙,可以套用 CDN 拯救被墙的 IP。

引用 引用