Cloudflare + Nginx + 3x-ui 救活被封禁 VPS 完整部署指南

本方案适用于 VPS IP 被 GFW 封锁(直连 SSH / HTTP / TCP 均不通) 的情况。通过将流量指向上游 Cloudflare CDN,由 Cloudflare 代理访问 VPS,实现安全、稳定的节点复活。

一、 整体架构原理

  • 外部通信:客户端与 Cloudflare、Cloudflare 与 VPS Nginx 之间的流量全程由 Cloudflare CDN 证书进行 HTTPS (TLS) 加密。

  • 内部通信:Nginx 将流量按路径反向代理到 VPS 本地(127.0.0.1),面板与节点无需内置 TLS。

二、 前置准备

  1. 域名与解析

    • 拥有一个域名(如 linkcf.top)并已托管至 Cloudflare。

    • 添加 A 记录 proxy 指向你的被封 VPS IP,并开启小黄云(Proxied 状态)

  2. Cloudflare SSL 设置

    • 在 Cloudflare 控制台 SSL/TLS Overview 中,将加密模式设置为 FullFull (Strict)

    • 进入 SSL/TLS Origin Server Create Certificate 生成源站证书,将内容分别保存至 VPS 的 /etc/ssl/cert.pem/etc/ssl/key.pem

  3. 启用 WebSocket

    • 在 Cloudflare 控制台 Network 中,确保 WebSockets 开关处于 On 状态。

三、 VPS 端部署步骤

1. 安装 3x-ui 面板

通过现有代理 SSH 登录 VPS,运行安装命令:

Bash

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

交互选项设置:

  • Database Selection:选择 1 (SQLite)。

  • Panel Port:设置为 2053注:切勿占用 443 端口,443 需留给 Nginx)。

  • SSL Certificate Setup:选择 4 (Skip SSL)无需在面板内申请证书)。

💡 提示:若此前误将面板端口设为 443,可运行 x-ui 命令进入菜单修改端口为 2053 并重启。

2. 配置 Nginx 反向代理

创建或修改 Nginx 配置文件 /etc/nginx/sites-available/proxy.conf

Nginx

server {
    listen 443 ssl http2;
    server_name proxy.linkcf.top;
 
    # Cloudflare 源站证书路径
    ssl_certificate /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;
 
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
 
    # 1. 反向代理 3x-ui 管理面板
    location / {
        proxy_pass http://127.0.0.1:2053;
        proxy_set_header Host $host;
        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;
    }
 
    # 2. 反向代理 VLESS / VMess WebSocket 节点流量
    location /ray {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:2083; # 对应 3x-ui 节点的内部端口
        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;
    }
}

启用配置并检查重启:

Bash

# 若使用 sites-available 目录,需建立链接:
ln -sf /etc/nginx/sites-available/proxy.conf /etc/nginx/sites-enabled/proxy.conf

# 测试配置并重载
nginx -t && systemctl restart nginx

3. 在 3x-ui 中创建节点与添加客户端 (v3.6.0+)

登录面板([https://proxy.linkcf.top/面板路径](https://proxy.linkcf.top/面板路径)):

  1. 创建入站规则 (Inbound)

    • 协议 (Protocol)VLESSVMess

    • 监听 IP127.0.0.1

    • 端口 (Port)2083 (必须与 Nginx location /ray 里的端口一致)

    • 传输协议 (Network)ws (WebSocket)

    • 伪装路径 (Path)/ray (必须与 Nginx 里的路径一致)

    • TLS关闭 (False)

  2. 添加客户端 (Clients / Users):(⚠️ v3.6.0+ 关键步骤

    • 3x-ui v3.6.0+ 采用了多用户管理架构,创建完入站后必须在面板中附加客户端,直接导出节点链接会为空。

    • 点击对应入站规则右侧的 + (添加客户端 / Add Client),设置 Email/备注,自动生成或分配 UUID/Password 后保存。

四、 节点导出与客户端配置(v2rayN / Clash / Shadowrocket 等)

1. 正确导出链接

  • 在 3x-ui 的入站列表中展开该规则,找到刚刚添加的具体客户端(Client)行

  • 点击该客户端右侧的 二维码 / 链接 图标进行复制或扫描导入(这样导出的链接才包含完整的 UUID 和用户凭据)。

2. 导入后的关键修正

从面板导出的链接导入客户端后,必须手动核对并修改以下参数

配置字段填写的准确数值关键说明
地址 (Address)proxy.linkcf.top切勿填入被封的 VPS 真实 IP
端口 (Port)443最易错点! 默认导出的 2083 是 VPS 本地端口,客户端必须手动改为 CF 的 443
传输协议 (Network)wsWebSocket
伪装路径 (Path)/ray必须带前缀 /
伪装域名 (Host)proxy.linkcf.top客户端连接域名
TLS开启 (True)客户端与 CF 之间需建立 TLS 加密
SNI / ServerNameproxy.linkcf.top-

五、 常见故障排查

  1. 节点导出链接为空 / 无法导入

    • 原因:3x-ui v3.6.0+ 没有在该入站下添加具体的客户端(Client)。

    • 解决:点击入站规则右侧的 + 号添加一个 Client,再导出该 Client 的链接。

  2. nginx: open() failed / sites-enabled/proxy 报错

    • 原因:存在失效的软链接。

    • 解决:rm -f /etc/nginx/sites-enabled/proxy 后重新关联。

  3. systemctl restart nginx 失败

    • 原因:443 端口被占用。

    • 解决:运行 lsof -i :443 检查,若 x-ui 占用则运行 x-ui 更改面板端口至 2053

  4. curl 测试响应 400 Bad Request

    • 命令:curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" [https://proxy.linkcf.top/ray](https://proxy.linkcf.top/ray)

    • 说明:收到 400 + Sec-Websocket-Version 代表链路已全线贯通,仅是因为缺少 VLESS 密钥验证,只需将客户端连接端口改为 443 并开启 TLS 即可连通