[{"data":1,"prerenderedAt":126},["ShallowReactive",2],{"$fMeAYe1FbnPBWCrPZam86Xa2QP61cDxogkncQuv00lFg":3,"$f3Fq3Vvc1RPyMVhHFov2pUb_iMkT70EUmvvI_ji0wSyQ":41},{"title":4,"date":5,"category":6,"readTime":7,"tags":8,"content":12,"_excerpt":13,"_faqs":14,"id":39,"_path":40},"移动宽带 SSH 不到海外 VPS？CF + nginx 反向代理的全套方案","2026-06-16","技术教程","17 分钟",[9,10,11],"333","eee","999","\u003Ch1>移动宽带 SSH 不到海外 VPS？CF + nginx 反向代理的全套方案\u003C\u002Fh1>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>核心结论\u003C\u002Fstrong>：国内网络移动运营商会主动阻断到海外 VPS 的 SSH 流量。\u003Cstrong>正确做法是让所有流量走 Cloudflare CDN\u003C\u002Fstrong>，国内网络 看不到真实 VPS IP，配合 nginx 网站防主动探测。本文提供从零到一的完整部署方案。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>\u003Cstrong>3 分钟摘要\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>移动宽带到 VPS 的 SSH 流量被 GFW 识别并阻断\u003C\u002Fli>\n\u003Cli>用 Cloudflare CDN 隐藏真实 VPS IP（免费方案）\u003C\u002Fli>\n\u003Cli>xray VLESS + WebSocket 加密代理流量\u003C\u002Fli>\n\u003Cli>nginx 网站防御 G网 主动探测\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>实测环境\u003C\u002Fstrong>：RackNerd VPS（Ubuntu 22.04）+ 3X-UI + Clash Verge + 域名走 Cloudflare\n\u003Cstrong>适用场景\u003C\u002Fstrong>：家庭移动宽带（移动\u002F电信\u002F联通）被国内网络移动运营商阻断 SSH 直连海外 VPS\n\u003Cstrong>最终效果\u003C\u002Fstrong>：根本不用 SSH 直连 VPS，所有代理流量都套上 Cloudflare CDN + 网站防主动探测\u003C\u002Fp>\n\u003Chr>\n\u003Ch2>一、问题背景\u003C\u002Fh2>\n\u003Cp>从 RackNerd 买了一台美国 VPS，IP \u003Ccode>104.223.xxx.xxx\u003C\u002Fcode>，给了 root 账号密码让我从 22 端口登录。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>异常表现\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>ping\u003C\u002Fcode> 这个 IP ✅ 通\u003C\u002Fli>\n\u003Cli>家里中国移动宽带 \u003Ccode>ssh root@IP -p 22\u003C\u002Fcode> ❌ 卡住\u003C\u002Fli>\n\u003Cli>改成 \u003Ccode>ssh -p 443\u003C\u002Fcode> 也卡住\u003C\u002Fli>\n\u003Cli>手机 4G\u002F5G 热点 \u003Ccode>ssh root@IP -p 22\u003C\u002Fcode> ✅ 正常\u003C\u002Fli>\n\u003Cli>服务器侧 sshd 日志显示 \u003Ccode>fatal: Timeout before authentication for &lt;我的国内IP&gt;\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>结论\u003C\u002Fstrong>：家里移动宽带到 VPS 的 SSH 流量被 GFW\u002F移动运营商识别并阻断。\u003Cstrong>不是 VPS 的问题，是 ISP\u002FGFW 的事\u003C\u002Fstrong>。\u003C\u002Fp>\n\u003Cp>客服让&quot;换 ISP 试试&quot;——这等于踢皮球，正确做法是\u003Cstrong>让所有流量走 Cloudflare CDN\u003C\u002Fstrong>，GFW 看不到真实 VPS IP。\u003C\u002Fp>\n\u003Chr>\n\u003Ch2>二、最终架构\u003C\u002Fh2>\n\u003Cpre>\u003Ccode>┌────────────────────────────────────────┐\n│  客户端（家里移动宽带）                  │\n│   Clash Verge → 节点 rackvps-cf         │\n└─────────────┬──────────────────────────┘\n              │  TLS 443（看起来是普通 HTTPS）\n              ▼\n┌────────────────────────────────────────┐\n│  Cloudflare Edge（全球 CDN 节点）       │\n│   - 隐藏真实 VPS IP                     │\n│   - 缓解 GFW 主动探测                   │\n└─────────────┬──────────────────────────┘\n              │  TLS 443（CF 回源）\n              ▼\n┌────────────────────────────────────────┐\n│  VPS nginx (0.0.0.0:443)               │\n│   路径 \u002Fws  → 127.0.0.1:10000 → xray  │\n│   其他路径  → \u002Fvar\u002Fwww\u002Ffake (假博客)    │\n└─────────────┬──────────────────────────┘\n              │\n              ▼\n┌────────────────────────────────────────┐\n│  xray (VLESS + WebSocket)              │\n│   鉴权通过 → 流量转发到互联网            │\n└────────────────────────────────────────┘\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>三层防护：\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>CF CDN\u003C\u002Fstrong> — 客户端只看到 CF 节点，看不到 VPS IP\u003C\u002Fli>\n\u003Cli>\u003Cstrong>nginx fallback\u003C\u002Fstrong> — GFW 主动探测看到的是普通博客\u003C\u002Fli>\n\u003Cli>\u003Cstrong>xray VLESS+WS\u003C\u002Fstrong> — 真实代理流量加密传输\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Chr>\n\u003Ch2>三、前置准备\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>项目\u003C\u002Fth>\n\u003Cth>说明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>域名\u003C\u002Ftd>\n\u003Ctd>自己的域名（已在 Cloudflare 接入，能改 NS）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>VPS\u003C\u002Ftd>\n\u003Ctd>任意海外 VPS（本文用 RackNerd Ubuntu 22.04）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>3X-UI\u003C\u002Ftd>\n\u003Ctd>VPS 上已装好（如果没装，参考 \u003Ca href=\"#%E5%9B%9Bvps-%E7%AB%AF%E9%85%8D%E7%BD%AE\">3X-UI 安装\u003C\u002Fa>）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>客户端\u003C\u002Ftd>\n\u003Ctd>Clash Verge（Windows \u002F macOS \u002F iOS \u002F Android 都有）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>本文用到的占位符\u003C\u002Fstrong>（实际配置时替换成自己的）：\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>占位符\u003C\u002Fth>\n\u003Cth>含义\u003C\u002Fth>\n\u003Cth>示例\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>&lt;域名&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>CF 上接入的域名\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>qzz.io\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>proxy.&lt;域名&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>代理用的子域\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>proxy.qzz.io\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>&lt;VPS_IP&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>VPS 真实 IP\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>104.223.xxx.xxx\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>&lt;UUID&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>3X-UI 生成的客户端 UUID\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>b1a4d8e7-xxxx-...\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Chr>\n\u003Ch2>四、VPS 端配置\u003C\u002Fh2>\n\u003Ch3>4.1 安装 3X-UI（如果还没装）\u003C\u002Fh3>\n\u003Cp>SSH 到 VPS（用手机 4G 热点连），执行：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">bash &lt;(curl -Ls https:\u002F\u002Fraw.githubusercontent.com\u002Fmhsanaei\u002F3x-ui\u002Fmaster\u002Finstall.sh)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>安装过程中会问：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>用户名\u003C\u002Fstrong>：自己设（默认 \u003Ccode>admin\u003C\u002Fcode>）\u003C\u002Fli>\n\u003Cli>\u003Cstrong>密码\u003C\u002Fstrong>：自己设（默认 \u003Ccode>admin\u003C\u002Fcode>，\u003Cstrong>务必改\u003C\u002Fstrong>）\u003C\u002Fli>\n\u003Cli>\u003Cstrong>面板端口\u003C\u002Fstrong>：自己设（默认 \u003Ccode>54321\u003C\u002Fcode>，建议改成 \u003Ccode>2053\u003C\u002Fcode> 之类不常见的）\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>安装完后访问 \u003Ccode>http:\u002F\u002F&lt;VPS_IP&gt;:&lt;面板端口&gt;\u003C\u002Fcode>，能看到登录页就 OK。\u003C\u002Fp>\n\u003Ch3>4.2 创建入站（VLESS + WebSocket + TLS）\u003C\u002Fh3>\n\u003Cp>3X-UI 面板 → \u003Cstrong>Inbounds\u003C\u002Fstrong> → \u003Cstrong>+ Add Inbound\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>字段\u003C\u002Fth>\n\u003Cth>填什么\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Remark\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>cf-vless\u003C\u002Fcode>（随便起）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Protocol\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>vless\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Listen IP\u003C\u002Ftd>\n\u003Ctd>留空（默认 0.0.0.0，先这样，最后再改）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Port\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>443\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Transmission\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>ws\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Path\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fws\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Security\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>TLS\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Certificate\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>暂时留空\u003C\u002Fstrong>（下一步填）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Key\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>暂时留空\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>ALPN\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>h2, http\u002F1.1\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>Clients\u003C\u002Fstrong> → 点 \u003Ccode>+ Add Client\u003C\u002Fcode>：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Email：随便填\u003C\u002Fli>\n\u003Cli>点 🔄 生成 UUID → \u003Cstrong>复制这个 UUID 备用\u003C\u002Fstrong>（客户端要填）\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>点 \u003Cstrong>Create\u003C\u002Fstrong> 保存。\u003C\u002Fp>\n\u003Ch3>4.3 生成 Cloudflare Origin Certificate\u003C\u002Fh3>\n\u003Cp>CF 控制台 → \u003Cstrong>SSL\u002FTLS\u003C\u002Fstrong> → \u003Cstrong>Origin Server\u003C\u002Fstrong> → \u003Cstrong>Create Certificate\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Hostname：填 \u003Ccode>proxy.&lt;域名&gt;\u003C\u002Fcode>（比如 \u003Ccode>proxy.qzz.io\u003C\u002Fcode>）\u003C\u002Fli>\n\u003Cli>Validity：\u003Ccode>15 years\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>点 \u003Cstrong>Create\u003C\u002Fstrong>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>复制生成的两段内容：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>Certificate\u003C\u002Fcode> 框内容（含 \u003Ccode>-----BEGIN CERTIFICATE-----\u003C\u002Fcode>）→ 存到 VPS \u003Ccode>\u002Fetc\u002Fssl\u002Fcf\u002Fcert.pem\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>Private key\u003C\u002Fcode> 框内容（含 \u003Ccode>-----BEGIN PRIVATE KEY-----\u003C\u002Fcode>）→ 存到 VPS \u003Ccode>\u002Fetc\u002Fssl\u002Fcf\u002Fkey.pem\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>在 VPS 上执行：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">mkdir -p \u002Fetc\u002Fssl\u002Fcf\nnano \u002Fetc\u002Fssl\u002Fcf\u002Fcert.pem    # 粘贴证书内容，Ctrl+O 保存，Ctrl+X 退出\nnano \u002Fetc\u002Fssl\u002Fcf\u002Fkey.pem     # 粘贴私钥内容\nchmod 644 \u002Fetc\u002Fssl\u002Fcf\u002Fcert.pem\nchmod 600 \u002Fetc\u002Fssl\u002Fcf\u002Fkey.pem\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>回到 3X-UI 面板，把入站重新编辑：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Certificate\u003C\u002Fstrong> 字段：粘贴 cert.pem 全部内容\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Key\u003C\u002Fstrong> 字段：粘贴 key.pem 全部内容\u003C\u002Fli>\n\u003Cli>保存\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>4.4 配置 Cloudflare 加密模式和 WebSocket\u003C\u002Fh3>\n\u003Cp>CF 控制台：\u003C\u002Fp>\n\u003Cp>\u003Cstrong>SSL\u002FTLS → Overview\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>加密模式选 \u003Cstrong>\u003Ccode>完整 (严格)\u003C\u002Fcode>\u003C\u002Fstrong>（不要选&quot;灵活&quot;，否则 CF 到源站不加密，xray 收不到 TLS 握手）\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Network\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>WebSockets\u003C\u002Fstrong> → \u003Cstrong>\u003Ccode>On\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>4.5 在 Cloudflare 添加 DNS 记录\u003C\u002Fh3>\n\u003Cp>CF 控制台 → \u003Cstrong>DNS\u003C\u002Fstrong> → \u003Cstrong>Records\u003C\u002Fstrong> → \u003Cstrong>+ Add record\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>字段\u003C\u002Fth>\n\u003Cth>值\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Type\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>A\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Name\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>proxy\u003C\u002Fcode>（子域名前缀，最终域名是 \u003Ccode>proxy.&lt;域名&gt;\u003C\u002Fcode>）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>IPv4 address\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>&lt;VPS_IP&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Proxy status\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>\u003Ccode>Proxied\u003C\u002Fcode>（橙色云朵）\u003C\u002Fstrong> ← 必须选这个\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>TTL\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>Auto\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>保存后验证（Windows PowerShell）：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-powershell\">nslookup proxy.&lt;域名&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>期望返回 CF 的 IP\u003C\u002Fstrong>（\u003Ccode>104.21.x.x\u003C\u002Fcode> \u002F \u003Ccode>172.67.x.x\u003C\u002Fcode> 等），\u003Cstrong>不是 VPS IP\u003C\u002Fstrong>。如果返回 VPS IP，说明橙色云朵没开。\u003C\u002Fp>\n\u003Ch3>4.6 验证：客户端能通过域名连代理\u003C\u002Fh3>\n\u003Cp>到此步 VPS 还在用 3X-UI 单独跑（监听 443 + TLS）。先在客户端验证代理能不能用。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Clash Verge 临时配置\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-yaml\">proxies:\n  - name: &quot;rackvps-cf&quot;\n    type: vless\n    server: proxy.&lt;域名&gt;\n    port: 443\n    uuid: &lt;UUID&gt;\n    network: ws\n    ws-opts:\n      path: \u002Fws\n      headers:\n        Host: proxy.&lt;域名&gt;\n    tls: true\n    servername: proxy.&lt;域名&gt;\n    alpn:\n      - h2\n      - http\u002F1.1\n\nproxy-groups:\n  - name: &quot;PROXY&quot;\n    type: select\n    proxies:\n      - rackvps-cf\n      - DIRECT\n\nrules:\n  - MATCH,PROXY\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Clash Verge → Profiles → 粘贴上面 YAML → 启用 → 系统代理打开 → 浏览器开 Google 验证。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>通了之后继续下面步骤，加 nginx 反代做防探测。\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Ch3>4.7 安装 nginx\u003C\u002Fh3>\n\u003Cp>VPS 上：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">apt update &amp;&amp; apt install -y nginx\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\n\u003Cp>⚠️ 注意是 \u003Ccode>apt install\u003C\u002Fcode> 不是 \u003Ccode>install\u003C\u002Fcode>（常见笔误）。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch3>4.8 写假网站内容\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-bash\">mkdir -p \u002Fvar\u002Fwww\u002Ffake\ncat &gt; \u002Fvar\u002Fwww\u002Ffake\u002Findex.html &lt;&lt;&#39;EOF&#39;\n&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;en&quot;&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;UTF-8&quot;&gt;\n    &lt;title&gt;My Notes&lt;\u002Ftitle&gt;\n    &lt;style&gt;\n        body { font-family: -apple-system, sans-serif; max-width: 720px; margin: 40px auto; padding: 0 20px; color: #333; }\n        h1 { border-bottom: 1px solid #eee; padding-bottom: 10px; }\n        .post { margin: 20px 0; }\n        .date { color: #999; font-size: 0.9em; }\n    &lt;\u002Fstyle&gt;\n&lt;\u002Fhead&gt;\n&lt;body&gt;\n    &lt;h1&gt;My Notes&lt;\u002Fh1&gt;\n    &lt;div class=&quot;post&quot;&gt;\n        &lt;h2&gt;Hello, world&lt;\u002Fh2&gt;\n        &lt;p class=&quot;date&quot;&gt;2026-01-15&lt;\u002Fp&gt;\n        &lt;p&gt;Just a personal blog. Nothing to see here.&lt;\u002Fp&gt;\n    &lt;\u002Fdiv&gt;\n    &lt;div class=&quot;post&quot;&gt;\n        &lt;h2&gt;About&lt;\u002Fh2&gt;\n        &lt;p&gt;This is my personal site. Drop me a line if you want to chat.&lt;\u002Fp&gt;\n    &lt;\u002Fdiv&gt;\n&lt;\u002Fbody&gt;\n&lt;\u002Fhtml&gt;\nEOF\n\ncat &gt; \u002Fvar\u002Fwww\u002Ffake\u002Frobots.txt &lt;&lt;&#39;EOF&#39;\nUser-agent: *\nDisallow: \u002Fadmin\u002F\nDisallow: \u002Fprivate\u002F\nAllow: \u002F\nEOF\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>4.9 写 nginx 配置\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-bash\">cat &gt; \u002Fetc\u002Fnginx\u002Fconf.d\u002Fproxy.conf &lt;&lt;&#39;EOF&#39;\n# 默认 server：处理无 SNI \u002F 主动探测请求（防御 GFW）\nserver {\n    listen 443 ssl http2 default_server;\n    server_name _;\n\n    ssl_certificate     \u002Fetc\u002Fssl\u002Fcf\u002Fcert.pem;\n    ssl_certificate_key \u002Fetc\u002Fssl\u002Fcf\u002Fkey.pem;\n    ssl_protocols       TLSv1.2 TLSv1.3;\n\n    root  \u002Fvar\u002Fwww\u002Ffake;\n    index index.html;\n\n    location \u002F {\n        try_files $uri $uri\u002F \u002Findex.html;\n    }\n}\n\n# 真实代理：匹配 proxy.&lt;域名&gt;\nserver {\n    listen 443 ssl http2;\n    server_name proxy.&lt;域名&gt;;\n\n    ssl_certificate     \u002Fetc\u002Fssl\u002Fcf\u002Fcert.pem;\n    ssl_certificate_key \u002Fetc\u002Fssl\u002Fcf\u002Fkey.pem;\n    ssl_protocols       TLSv1.2 TLSv1.3;\n    ssl_ciphers         HIGH:!aNULL:!MD5;\n\n    root  \u002Fvar\u002Fwww\u002Ffake;\n    index index.html;\n\n    # WebSocket 路径 → xray\n    location \u002Fws {\n        proxy_pass http:\u002F\u002F127.0.0.1:10000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection &quot;upgrade&quot;;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_read_timeout 3600s;\n    }\n\n    # 默认：返回假网站\n    location \u002F {\n        try_files $uri $uri\u002F \u002Findex.html;\n    }\n}\n\n# HTTP → HTTPS 重定向\nserver {\n    listen 80;\n    server_name proxy.&lt;域名&gt;;\n    return 301 https:\u002F\u002F$host$request_uri;\n}\n\n# 80 端口 default_server（防止端口扫描暴露）\nserver {\n    listen 80 default_server;\n    server_name _;\n    root \u002Fvar\u002Fwww\u002Ffake;\n    index index.html;\n    location \u002F {\n        try_files $uri $uri\u002F \u002Findex.html;\n    }\n}\nEOF\n\n# 删掉 nginx 默认站（避免冲突）\nrm -f \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Fdefault\n\n# 检查 + 启动\nnginx -t\nsystemctl enable --now nginx\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>4.10 修改 3X-UI 入站（让出 443 端口给 nginx）\u003C\u002Fh3>\n\u003Cp>3X-UI 面板 → Inbounds → 编辑 \u003Ccode>cf-vless\u003C\u002Fcode> 入站：\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>字段\u003C\u002Fth>\n\u003Cth>改为什么\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Port\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>443\u003C\u002Fcode> → \u003Cstrong>\u003Ccode>10000\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Listen IP\u003C\u002Ftd>\n\u003Ctd>留空 → \u003Cstrong>\u003Ccode>127.0.0.1\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Security\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>TLS\u003C\u002Fcode> → \u003Cstrong>\u003Ccode>None\u003C\u002Fcode>\u003C\u002Fstrong>（关掉，TLS 由 nginx 处理）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>数字证书\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>清空\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>保存。\u003C\u002Fp>\n\u003Ch3>4.11 重启服务（顺序很重要）\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-bash\">x-ui restart           # 3X-UI 重启，xray 切到 127.0.0.1:10000\nsystemctl restart nginx # nginx 现在能抢到 443 了\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\n\u003Cp>⚠️ \u003Cstrong>顺序必须是先 \u003Ccode>x-ui restart\u003C\u002Fcode> 再 \u003Ccode>systemctl restart nginx\u003C\u002Fcode>\u003C\u002Fstrong>。否则 xray 还占着 443，nginx 启动会报 \u003Ccode>bind() failed (98: Address already in use)\u003C\u002Fcode>。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch3>4.12 验证\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-bash\"># 1. 端口监听\nss -tlnp | grep -E &#39;:80|:443|:10000&#39;\n# 期望：\n#   nginx 在 *:80、*:443\n#   xray 在 127.0.0.1:10000（必须是 127.0.0.1，不是 0.0.0.0）\n\n# 2. 域名访问假网站\ncurl -sI https:\u002F\u002Fproxy.&lt;域名&gt;\u002F\n# 期望：HTTP\u002F2 200\n\n# 3. 看假网站内容\ncurl -s https:\u002F\u002Fproxy.&lt;域名&gt;\u002F | grep &quot;My Notes&quot;\n# 期望：能找到 My Notes 字样\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Chr>\n\u003Ch2>五、客户端配置（Clash Verge）\u003C\u002Fh2>\n\u003Ch3>5.1 创建 Profile\u003C\u002Fh3>\n\u003Cp>Clash Verge → \u003Cstrong>Profiles\u003C\u002Fstrong> → \u003Cstrong>New Profile\u003C\u002Fstrong> → 选空白模板。\u003C\u002Fp>\n\u003Ch3>5.2 写入配置\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-yaml\">mixed-port: 7890\nallow-lan: false\nmode: rule\nlog-level: info\n\nproxies:\n  - name: &quot;rackvps-cf&quot;\n    type: vless\n    server: proxy.&lt;域名&gt;\n    port: 443\n    uuid: &lt;UUID&gt;\n    network: ws\n    ws-opts:\n      path: \u002Fws\n      headers:\n        Host: proxy.&lt;域名&gt;\n    tls: true\n    servername: proxy.&lt;域名&gt;\n    alpn:\n      - h2\n      - http\u002F1.1\n    skip-cert-verify: false\n    udp: true\n\nproxy-groups:\n  - name: &quot;PROXY&quot;\n    type: select\n    proxies:\n      - rackvps-cf\n      - DIRECT\n\nrules:\n  - GEOIP,LAN,DIRECT\n  - GEOIP,CN,DIRECT\n  - MATCH,PROXY\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\n\u003Cp>把 \u003Ccode>&lt;域名&gt;\u003C\u002Fcode> 和 \u003Ccode>&lt;UUID&gt;\u003C\u002Fcode> 替换成自己的。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch3>5.3 启用代理\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>顶部 \u003Cstrong>Proxies\u003C\u002Fstrong> → \u003Ccode>PROXY\u003C\u002Fcode> 组 → 选 \u003Ccode>rackvps-cf\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>主界面打开 \u003Cstrong>System Proxy\u003C\u002Fstrong> 或 \u003Cstrong>TUN Mode\u003C\u002Fstrong>（TUN 更彻底）\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>5.4 验证代理生效\u003C\u002Fh3>\n\u003Cp>浏览器访问：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fip.sb\">https:\u002F\u002Fip.sb\u003C\u002Fa> — 应显示美国 IP \u003Ccode>104.223.xxx.xxx\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.google.com\">https:\u002F\u002Fwww.google.com\u003C\u002Fa> — 应能打开\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fipinfo.io\u002Fjson\">https:\u002F\u002Fipinfo.io\u002Fjson\u003C\u002Fa> — 应显示 \u003Ccode>country: &quot;US&quot;\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>或 PowerShell：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-powershell\">curl.exe -s https:\u002F\u002Fifconfig.me\n# 期望：104.223.xxx.xxx\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Chr>\n\u003Ch2>六、故障排查\u003C\u002Fh2>\n\u003Ch3>6.1 浏览器报 \u003Ccode>HTTP 521\u003C\u002Fcode>\u003C\u002Fh3>\n\u003Cp>CF 连不上 VPS。\u003Cstrong>在 VPS 上\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">ss -tlnp | grep 443\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>看不到任何 443 监听 → nginx 没起来 → \u003Ccode>systemctl restart nginx\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>看到 xray 在 443 → 3X-UI 入站没改 10000\u002F127.0.0.1\u002FNone → 改完 \u003Ccode>x-ui restart\u003C\u002Fcode> 再 \u003Ccode>systemctl restart nginx\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>6.2 浏览器报 \u003Ccode>HTTP 502\u003C\u002Fcode>\u003C\u002Fh3>\n\u003Cp>nginx 起来了但连不上 xray：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">ss -tlnp | grep 10000\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>看不到 \u003Ccode>127.0.0.1:10000\u003C\u002Fcode> → xray 没在 10000 监听 → 3X-UI 入站改没改好。\u003C\u002Fp>\n\u003Ch3>6.3 Clash Verge 节点显示 Timeout\u003C\u002Fh3>\n\u003Cp>按顺序检查：\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cp>\u003Cstrong>域名解析\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-powershell\">nslookup proxy.&lt;域名&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>必须是 CF IP，不能是 VPS IP。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>\u003Cstrong>CF SSL 模式\u003C\u002Fstrong>：必须是 \u003Ccode>完整 (严格)\u003C\u002Fcode>，不能是 \u003Ccode>灵活\u003C\u002Fcode>。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>\u003Cstrong>CF WebSockets\u003C\u002Fstrong>：必须是 \u003Ccode>On\u003C\u002Fcode>。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>\u003Cstrong>UUID 是否对\u003C\u002Fstrong>：3X-UI 面板复制 UUID 重新填。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>\u003Cstrong>路径是否对\u003C\u002Fstrong>：客户端 \u003Ccode>\u002Fws\u003C\u002Fcode> 和 3X-UI \u003Ccode>Path: \u002Fws\u003C\u002Fcode> 必须完全一致。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3>6.4 nginx 启动报 \u003Ccode>bind() to 0.0.0.0:443 failed (98: Unknown error)\u003C\u002Fcode>\u003C\u002Fh3>\n\u003Cp>443 端口被占。先确认 xray 没在 443：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">ss -tlnp | grep 443\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>看到 xray → 3X-UI 入站改成 10000\u002F127.0.0.1\u002FNone → \u003Ccode>x-ui restart\u003C\u002Fcode> → 再启 nginx。\u003C\u002Fp>\n\u003Ch3>6.5 假网站能访问但 \u003Ccode>\u002Fws\u003C\u002Fcode> 报 400\u003C\u002Fh3>\n\u003Cp>nginx 转发到 xray 的配置出问题：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>路径 \u003Ccode>\u002Fws\u003C\u002Fcode> 必须跟 3X-UI 入站 \u003Ccode>Path: \u002Fws\u003C\u002Fcode> 完全一致\u003C\u002Fli>\n\u003Cli>nginx 配置里 \u003Ccode>Connection &quot;upgrade&quot;\u003C\u002Fcode> 引号必须是英文双引号\u003C\u002Fli>\n\u003Cli>nginx 转发 HTTP\u002F1.1 给 xray，xray 必须也是 WS 模式（不能是别的传输）\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>6.6 Windows PowerShell \u003Ccode>curl\u003C\u002Fcode> 用不了\u003C\u002Fh3>\n\u003Cp>PowerShell 的 \u003Ccode>curl\u003C\u002Fcode> 是 \u003Ccode>Invoke-WebRequest\u003C\u002Fcode> 的别名，参数不一样。\u003Cstrong>用真 curl\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-powershell\">curl.exe -sI https:\u002F\u002Fproxy.&lt;域名&gt;\u002F\ncurl.exe -s https:\u002F\u002Fproxy.&lt;域名&gt;\u002F | findstr &quot;My Notes&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>或装 Git for Windows 自带 \u003Ccode>curl.exe\u003C\u002Fcode>。\u003C\u002Fp>\n\u003Ch3>6.7 改了 3X-UI 入站后代理掉了\u003C\u002Fh3>\n\u003Cp>3X-UI 入站\u003Cstrong>千万别改回 443\u002F0.0.0.0\u002FTLS\u003C\u002Fstrong>——nginx 就会因为端口冲突起不来。\u003C\u002Fp>\n\u003Cp>合法改动：端口改 10001\u002F10002...、路径改 \u002Fws2 \u002Fws3...，\u003Cstrong>Listen IP 永远 127.0.0.1，Security 永远 None\u003C\u002Fstrong>。\u003C\u002Fp>\n\u003Chr>\n\u003Ch2>七、日常维护\u003C\u002Fh2>\n\u003Ch3>7.1 看代理流量\u003C\u002Fh3>\n\u003Cp>VPS 上：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">tail -f \u002Fvar\u002Flog\u002Fnginx\u002Faccess.log | grep \u002Fws\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>持续输出 \u003Ccode>GET \u002Fws HTTP\u002F1.1 101 ...\u003C\u002Fcode> 的日志。\u003Cstrong>\u003Ccode>101\u003C\u002Fcode> = WebSocket 升级成功 = 代理流量\u003C\u002Fstrong>。\u003C\u002Fp>\n\u003Ch3>7.2 改假网站\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-bash\">nano \u002Fvar\u002Fwww\u002Ffake\u002Findex.html\nsystemctl reload nginx\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>7.3 加新节点\u003C\u002Fh3>\n\u003Col>\n\u003Cli>3X-UI 创建新入站：端口 \u003Ccode>10001\u003C\u002Fcode>，Listen \u003Ccode>127.0.0.1\u003C\u002Fcode>，Security \u003Ccode>None\u003C\u002Fcode>，Path \u003Ccode>\u002Fws2\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>nginx 加新转发：\u003Cpre>\u003Ccode class=\"language-nginx\">location \u002Fws2 {\n    proxy_pass http:\u002F\u002F127.0.0.1:10001;\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection &quot;upgrade&quot;;\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_read_timeout 3600s;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\u003Ccode>systemctl reload nginx\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>客户端加节点，path 填 \u003Ccode>\u002Fws2\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3>7.4 重启服务\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-bash\">systemctl restart nginx\nx-ui restart\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>7.5 防火墙\u003C\u002Fh3>\n\u003Cp>UFW 通常 inactive 即可，需要开：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">ufw allow 443\u002Ftcp\nufw allow &lt;3X-UI面板端口&gt;\u002Ftcp    # 比如 2053\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Chr>\n\u003Ch2>八、关键点回顾\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>关键点\u003C\u002Fth>\n\u003Cth>错误做法\u003C\u002Fth>\n\u003Cth>正确做法\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>CF DNS 记录\u003C\u002Ftd>\n\u003Ctd>灰色云朵（DNS only）\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>橙色云朵（Proxied）\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>CF SSL 模式\u003C\u002Ftd>\n\u003Ctd>灵活\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>完整 (严格)\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>3X-UI 入站端口\u003C\u002Ftd>\n\u003Ctd>443\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>10000 + Listen 127.0.0.1 + Security None\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>CF Origin Cert\u003C\u002Ftd>\n\u003Ctd>用 Let&#39;s Encrypt\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>用 CF Origin Cert（15 年）\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>nginx 启动顺序\u003C\u002Ftd>\n\u003Ctd>先启 nginx 再改 3X-UI\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>先 \u003Ccode>x-ui restart\u003C\u002Fcode>，再 \u003Ccode>systemctl restart nginx\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>nginx fallback 路径\u003C\u002Ftd>\n\u003Ctd>留空 Path\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>Path \u003Ccode>\u002F\u003C\u002Fcode> + Dest \u003Ccode>127.0.0.1:8080\u003C\u002Fcode>\u003C\u002Fstrong> （用方案 A 时）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Windows curl\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>curl -sI URL\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>\u003Ccode>curl.exe -sI URL\u003C\u002Fcode>\u003C\u002Fstrong>（带 .exe 后缀）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Chr>\n\u003Ch2>九、最终目录结构\u003C\u002Fh2>\n\u003Cpre>\u003Ccode>VPS 文件结构：\n\u002Fetc\u002Fssl\u002Fcf\u002F\n├── cert.pem              # CF Origin 证书\n└── key.pem               # CF Origin 私钥\n\u002Fvar\u002Fwww\u002Ffake\u002F\n├── index.html            # 假博客首页\n└── robots.txt            # 防爬虫提示\n\u002Fetc\u002Fnginx\u002Fconf.d\u002F\n└── proxy.conf            # nginx 反代配置\n\u002Fusr\u002Flocal\u002Fx-ui\u002F          # 3X-UI 安装目录\n└── bin\u002Fconfig.json       # 3X-UI 生成的 xray 配置\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Chr>\n\u003Ch2>十、写在最后\u003C\u002Fh2>\n\u003Cp>整套方案的核心思路：\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>不要直连 VPS IP\u003C\u002Fstrong>（被 GFW\u002FISP 干扰）\u003C\u002Fli>\n\u003Cli>\u003Cstrong>所有流量套上 Cloudflare CDN\u003C\u002Fstrong>（GFW 不敢全面封 CF）\u003C\u002Fli>\n\u003Cli>\u003Cstrong>VPS 上不要让 xray 直接接 TLS\u003C\u002Fstrong>（主动探测会暴露 xray）\u003C\u002Fli>\n\u003Cli>\u003Cstrong>用 nginx 终结 TLS + 转发 WS\u003C\u002Fstrong>（探测时看到的是普通博客）\u003C\u002Fli>\n\u003Cli>\u003Cstrong>3X-UI 监听 127.0.0.1 的非标准端口\u003C\u002Fstrong>（永远不暴露到公网）\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>这样就实现了：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>国内移动宽带可以科学上网 ✅\u003C\u002Fli>\n\u003Cli>国外网络也照样能用 ✅\u003C\u002Fli>\n\u003Cli>GFW 主动探测看到的是博客 ✅\u003C\u002Fli>\n\u003Cli>VPS IP 永远不会直接暴露 ✅\u003C\u002Fli>\n\u003Cli>日常维护只需要改 3X-UI 入站和 nginx 配置 ✅\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Chr>\n\u003Ch2>常见问题 FAQ\u003C\u002Fh2>\n\u003Ch3>为什么 SSH 连不上 VPS，但 ping 是通的？\u003C\u002Fh3>\n\u003Cp>这是 GFW\u002F移动运营商对 SSH 流量的\u003Cstrong>主动识别与阻断\u003C\u002Fstrong>。GFW 维护了常用协议的特征库，SSH（22\u002F443 端口）的握手包有明显特征。一旦匹配，直接 RST 断开连接。\u003Ccode>ping\u003C\u002Fcode> 用的是 ICMP 协议，不在阻断范围内，所以会通。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>解决方法\u003C\u002Fstrong>：不要直连 VPS IP，让所有流量走 Cloudflare CDN，GFW 看不到真实 IP。\u003C\u002Fp>\n\u003Ch3>Cloudflare 免费版够用吗？\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>够用\u003C\u002Fstrong>。本方案用的就是 CF 免费版：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>DNS 解析：免费\u003C\u002Fli>\n\u003Cli>CDN 加速：免费\u003C\u002Fli>\n\u003Cli>Origin Certificate：免费 15 年有效期\u003C\u002Fli>\n\u003Cli>不限流量（公平使用）\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>唯一限制：免费版\u003Cstrong>不支持 Spectrum（TCP\u002FUDP 转发）\u003C\u002Fstrong>，但 VLESS + WebSocket 走 HTTPS 443 端口完全够用。\u003C\u002Fp>\n\u003Ch3>一定要用 RackNerd VPS 吗？其他 VPS 行不行？\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>可以\u003C\u002Fstrong>。本方案对 VPS 厂商没有要求，只要满足：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>系统：Ubuntu 20.04+ \u002F Debian 11+ \u002F CentOS 7+\u003C\u002Fli>\n\u003Cli>能 SSH 登录（用手机 4G 热点或机场中转）\u003C\u002Fli>\n\u003Cli>IP 没被墙（可以用 \u003Ccode>ping.chinaz.com\u003C\u002Fcode> 测一下）\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>推荐 VPS 厂商\u003C\u002Fstrong>（按性价比）：RackNerd、CloudCone、BandwagonHost（搬瓦工）、HostDare、Vultr（按小时计费）。\u003C\u002Fp>\n\u003Ch3>为什么用 VLESS 而不是 VMess 或 Trojan？\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>协议\u003C\u002Fth>\n\u003Cth>特点\u003C\u002Fth>\n\u003Cth>推荐度\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Cstrong>VLESS\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>新一代轻量协议，无加密依赖 TLS\u003C\u002Ftd>\n\u003Ctd>⭐⭐⭐⭐⭐（推荐）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>VMess\u003C\u002Ftd>\n\u003Ctd>老牌协议，自带加密但效率低\u003C\u002Ftd>\n\u003Ctd>⭐⭐⭐\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Trojan\u003C\u002Ftd>\n\u003Ctd>伪装成 HTTPS，但握手特征明显\u003C\u002Ftd>\n\u003Ctd>⭐⭐\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Shadowsocks\u003C\u002Ftd>\n\u003Ctd>已被 GFW 部分识别\u003C\u002Ftd>\n\u003Ctd>⭐⭐\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>VLESS + WebSocket + TLS\u003C\u002Fstrong> 是目前最难被 GFW 识别的组合，因为流量完全包裹在标准 HTTPS 中。\u003C\u002Fp>\n\u003Ch3>nginx 假网站有什么作用？\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>防 GFW 主动探测\u003C\u002Fstrong>。GFW 会对 Cloudflare CDN 后面的 IP 发起 HTTPS 探测请求：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>如果 443 端口返回的是 xray 的特征 → 标记为代理，封 IP\u003C\u002Fli>\n\u003Cli>如果 443 端口返回的是普通博客 → 当作正常网站放行\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>nginx 假网站就是让&quot;非代理用户&quot;访问时看到的是博客，真实代理用户访问 \u003Ccode>\u002Fws\u003C\u002Fcode> 路径才走 xray。\u003C\u002Fp>\n\u003Ch3>3X-UI 面板要不要暴露到公网？\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>绝对不要\u003C\u002Fstrong>。3X-UI 面板必须：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>监听 \u003Ccode>127.0.0.1\u003C\u002Fcode>（仅本机访问）\u003C\u002Fli>\n\u003Cli>端口改非标准（如 \u003Ccode>2053\u003C\u002Fcode>、\u003Ccode>31456\u003C\u002Fcode>）\u003C\u002Fli>\n\u003Cli>设置强密码 + 改默认用户名 \u003Ccode>admin\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>访问面板通过 SSH 端口转发：\u003Ccode>ssh -L 2053:127.0.0.1:2053 root@VPS_IP\u003C\u002Fcode>，然后浏览器开 \u003Ccode>http:\u002F\u002F127.0.0.1:2053\u003C\u002Fcode>。\u003C\u002Fp>\n\u003Ch3>这套方案会被封吗？\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>大概率不会长期稳定，但能用很久\u003C\u002Fstrong>。G网 不断升级，本质是一场猫鼠游戏。本方案的优势：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>VPS IP 永远不暴露 → 封 IP 难度极大\u003C\u002Fli>\n\u003Cli>网站防探测 → G网 看不到 xray 特征\u003C\u002Fli>\n\u003Cli>Cloudflare CDN 缓冲 → 真实流量被分散到 CF 全球节点\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>降低风险的额外建议\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>不要在 VPS 上做违规内容\u003C\u002Fli>\n\u003Cli>节点不要分享给太多人\u003C\u002Fli>\n\u003Cli>定期更换 UUID 和路径\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>一个域名能部署多个节点吗？\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>可以\u003C\u002Fstrong>。在 Cloudflare DNS 里加多个 A 记录（如 \u003Ccode>proxy1\u003C\u002Fcode>、\u003Ccode>proxy2\u003C\u002Fcode>、\u003Ccode>proxy3\u003C\u002Fcode>），都指向同一 VPS IP。客户端可以配置多个节点做负载均衡 \u002F 故障转移。\u003C\u002Fp>\n\u003Cul>\n\u003Cli>本文只做技术方案，不涉及任何法律问题。请在法律范围内使用。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>完。\u003C\u002Fstrong>\u003C\u002Fp>\n","3 分钟摘要： - 移动宽带到 VPS 的 SSH 流量被 GFW 识别并阻断 - 用 Cloudflare CDN 隐藏真实 VPS IP（免费方案） - xray VLESS + WebSocket 加密代理流量 - nginx 网站防御 G网 主动探测",[15,18,21,24,27,30,33,36],{"question":16,"answer":17},"为什么 SSH 连不上 VPS，但 ping 是通的？","这是 GFW\u002F移动运营商对 SSH 流量的主动识别与阻断。GFW 维护了常用协议的特征库，SSH（22\u002F443 端口）的握手包有明显特征。一旦匹配，直接 RST 断开连接。ping 用的是 ICMP 协议，不在阻断范围内，所以会通。\n解决方法：不要直连 VPS IP，让所有流量走 Cloudflare CDN，GFW 看不到真实 IP。",{"question":19,"answer":20},"Cloudflare 免费版够用吗？","够用。本方案用的就是 CF 免费版：\nDNS 解析：免费\nCDN 加速：免费\nOrigin Certificate：免费 15 年有效期\n不限流量（公平使用）\n唯一限制：免费版不支持 Spectrum（TCP\u002FUDP 转发），但 VLESS + WebSocket 走 HTTPS 443 端口完全够用。",{"question":22,"answer":23},"一定要用 RackNerd VPS 吗？其他 VPS 行不行？","可以。本方案对 VPS 厂商没有要求，只要满足：\n系统：Ubuntu 20.04+ \u002F Debian 11+ \u002F CentOS 7+\n能 SSH 登录（用手机 4G 热点或机场中转）\nIP 没被墙（可以用 ping.chinaz.com 测一下）\n推荐 VPS 厂商（按性价比）：RackNerd、CloudCone、BandwagonHost（搬瓦工）、HostDare、Vultr（按小时计费）。",{"question":25,"answer":26},"为什么用 VLESS 而不是 VMess 或 Trojan？","| 协议 | 特点 | 推荐度 |\n|------|------|------|\n| VLESS | 新一代轻量协议，无加密依赖 TLS | ⭐⭐⭐⭐⭐（推荐） |\n| VMess | 老牌协议，自带加密但效率低 | ⭐⭐⭐ |\n| Trojan | 伪装成 HTTPS，但握手特征明显 | ⭐⭐ |\n| Shadowsocks | 已被 GFW 部分识别 | ⭐⭐ |\nVLESS + WebSocket + TLS 是目前最难被 GFW 识别的组合，因为流量完全包裹在标准 HTTPS 中。",{"question":28,"answer":29},"nginx 假网站有什么作用？","防 GFW 主动探测。GFW 会对 Cloudflare CDN 后面的 IP 发起 HTTPS 探测请求：\n如果 443 端口返回的是 xray 的特征 → 标记为代理，封 IP\n如果 443 端口返回的是普通博客 → 当作正常网站放行\nnginx 假网站就是让\"非代理用户\"访问时看到的是博客，真实代理用户访问 \u002Fws 路径才走 xray。",{"question":31,"answer":32},"3X-UI 面板要不要暴露到公网？","绝对不要。3X-UI 面板必须：\n监听 127.0.0.1（仅本机访问）\n端口改非标准（如 2053、31456）\n设置强密码 + 改默认用户名 admin\n访问面板通过 SSH 端口转发：ssh -L 2053:127.0.0.1:2053 root@VPS_IP，然后浏览器开 http:\u002F\u002F127.0.0.1:2053。",{"question":34,"answer":35},"这套方案会被封吗？","大概率不会长期稳定，但能用很久。G网 不断升级，本质是一场猫鼠游戏。本方案的优势：\nVPS IP 永远不暴露 → 封 IP 难度极大\n网站防探测 → G网 看不到 xray 特征\nCloudflare CDN 缓冲 → 真实流量被分散到 CF 全球节点\n降低风险的额外建议：\n不要在 VPS 上做违规内容\n节点不要分享给太多人\n定期更换 UUID 和路径",{"question":37,"answer":38},"一个域名能部署多个节点吗？","可以。在 Cloudflare DNS 里加多个 A 记录（如 proxy1、proxy2、proxy3），都指向同一 VPS IP。客户端可以配置多个节点做负载均衡 \u002F 故障转移。\n本文只做技术方案，不涉及任何法律问题。请在法律范围内使用。\n完。","cf-xray-nginx-tutorial","\u002Fwriting\u002Fcf-xray-nginx-tutorial\u002F",[42,44,58,69,80,91,105,116],{"id":39,"title":4,"date":5,"category":6,"readTime":7,"tags":43,"_excerpt":13,"_path":40},[9,10,11],{"id":45,"title":46,"date":47,"category":48,"readTime":49,"tags":50,"_excerpt":56,"_path":57},"telegram-86-login-recovery","86 手机号无法登录 Telegram 终极解决方案：绕过付费验证码 + 旧设备验证找回账号","2026-06-14","工具教程","8 分钟",[51,52,53,54,55],"Telegram","86手机号","账号找回","二次验证","短信收费","3 分钟摘要： - 86 号码 + 邮箱 + 二次验证密码 = 找回账号的三要素，缺一不可 - 用第三方客户端 Telega（绕过 Google Play 校验版本）登录，触发邮箱 + 2FA 通道 - 登录成功后再用官方 Telegram 登录、更新到最新版本 - 整个过程不需要原手机短信、不需要","\u002Fwriting\u002Ftelegram-86-login-recovery\u002F",{"id":59,"title":60,"date":61,"category":62,"readTime":49,"tags":63,"_excerpt":67,"_path":68},"indie-developer-journey","从零到一：我的独立开发之路","2026-05-15","创业人生",[64,65,66],"独立开发","创业","个人成长","2023年初，我做出了一个重要决定：离开稳定的工作，成为一名独立开发者。这个决定并非一时冲动，而是经过深思熟虑的结果。","\u002Fwriting\u002Findie-developer-journey\u002F",{"id":70,"title":71,"date":72,"category":6,"readTime":73,"tags":74,"_excerpt":78,"_path":79},"vue3-composition-api","Vue 3 Composition API 完全指南","2026-04-28","12 分钟",[75,76,77],"Vue","JavaScript","前端","Composition API 是 Vue 3 引入的一组基于函数的 API，它允许我们使用函数来组织组件逻辑，而不是选项对象。","\u002Fwriting\u002Fvue3-composition-api\u002F",{"id":81,"title":82,"date":83,"category":6,"readTime":84,"tags":85,"_excerpt":89,"_path":90},"react-native-performance","React Native 性能优化实战","2026-04-15","10 分钟",[86,87,88],"React Native","性能","移动端","在开发 React Native 应用时，我们经常会遇到以下性能问题：","\u002Fwriting\u002Freact-native-performance\u002F",{"id":92,"title":93,"date":94,"category":95,"readTime":96,"tags":97,"_excerpt":103,"_path":104},"futures-trading-seven-rules","期货交易的七条铁律：从亏损到稳定盈利的思考","2026-03-20","交易心得","5 分钟",[98,95,99,100,101,102],"期货交易","交易思维","止损","趋势跟踪","心法","做期货这几年，踩过的坑、爆过的仓、熬过的夜，最终都沉淀成这七条心得。期货交易本质上不是预测行情，而是管理自己。以下每一条都是真金白银换来的，建议反复读、慢慢悟。","\u002Fwriting\u002Ffutures-trading-seven-rules\u002F",{"id":106,"title":107,"date":108,"category":109,"readTime":96,"tags":110,"_excerpt":114,"_path":115},"git-workflow-best-practices","Git 工作流最佳实践","2026-03-10","开发工具",[111,112,113],"Git","团队协作","版本控制","这是一个经典的分支模型：","\u002Fwriting\u002Fgit-workflow-best-practices\u002F",{"id":117,"title":118,"date":119,"category":6,"readTime":120,"tags":121,"_excerpt":124,"_path":125},"typescript-tips","TypeScript 实用技巧","2026-02-25","7 分钟",[122,77,123],"TypeScript","编程技巧","使用类型守卫来缩小类型范围：","\u002Fwriting\u002Ftypescript-tips\u002F",1781610782243]