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。
二、 前置准备
-
域名与解析:
-
拥有一个域名(如
linkcf.top)并已托管至 Cloudflare。 -
添加 A 记录
proxy指向你的被封 VPS IP,并开启小黄云(Proxied 状态)。
-
-
Cloudflare SSL 设置:
-
在 Cloudflare 控制台 SSL/TLS Overview 中,将加密模式设置为 Full 或 Full (Strict)。
-
进入 SSL/TLS Origin Server Create Certificate 生成源站证书,将内容分别保存至 VPS 的
/etc/ssl/cert.pem和/etc/ssl/key.pem。
-
-
启用 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/面板路径)):
-
创建入站规则 (Inbound):
-
协议 (Protocol):
VLESS或VMess -
监听 IP:
127.0.0.1 -
端口 (Port):
2083(必须与 Nginxlocation /ray里的端口一致) -
传输协议 (Network):
ws(WebSocket) -
伪装路径 (Path):
/ray(必须与 Nginx 里的路径一致) -
TLS:关闭 (False)
-
-
添加客户端 (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) | ws | WebSocket |
| 伪装路径 (Path) | /ray | 必须带前缀 / |
| 伪装域名 (Host) | proxy.linkcf.top | 客户端连接域名 |
| TLS | 开启 (True) | 客户端与 CF 之间需建立 TLS 加密 |
| SNI / ServerName | proxy.linkcf.top | - |
五、 常见故障排查
-
节点导出链接为空 / 无法导入:
-
原因:3x-ui v3.6.0+ 没有在该入站下添加具体的客户端(Client)。
-
解决:点击入站规则右侧的
+号添加一个 Client,再导出该 Client 的链接。
-
-
nginx: open() failed / sites-enabled/proxy报错:-
原因:存在失效的软链接。
-
解决:
rm -f /etc/nginx/sites-enabled/proxy后重新关联。
-
-
systemctl restart nginx失败:-
原因:443 端口被占用。
-
解决:运行
lsof -i :443检查,若x-ui占用则运行x-ui更改面板端口至2053。
-
-
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 即可连通。
-