Skip to content

Instantly share code, notes, and snippets.

@zxkane
Created January 26, 2026 08:29
Show Gist options
  • Select an option

  • Save zxkane/477d7f866ec7b8396285718bcc8bde54 to your computer and use it in GitHub Desktop.

Select an option

Save zxkane/477d7f866ec7b8396285718bcc8bde54 to your computer and use it in GitHub Desktop.
deploy cloudflare vless

Cloudflare Free Tier VLESS 代理部署指南

本文档详细记录了如何在 Cloudflare 免费账户上成功部署 VLESS 代理的完整步骤。

📋 目录


背景与问题

为什么 Workers 直接部署会失败?

在 Cloudflare 免费账户上直接部署 VLESS Workers 会遇到 Error 1101 错误。

根本原因:VLESS 代理需要使用 cloudflare:sockets 模块来建立 TCP 连接,但该模块在免费账户上受限。

// 这行代码在免费账户上会导致 1101 错误
import { connect } from "cloudflare:sockets";

验证方法

# 创建一个最简测试 worker
cat > test-sockets.js << 'EOF'
import { connect } from "cloudflare:sockets";
export default {
  async fetch(request) {
    return new Response("Sockets module loaded");
  }
};
EOF

# 部署后访问会返回 Error 1101

明文版 vs 混淆版

版本 文件 状态 说明
明文版 _worker.js ❌ 不可用 直接使用会触发 1101
混淆版 _worker混淆.js ✅ 可用 经过混淆处理,可正常部署

解决方案

核心方案:Cloudflare Pages + 混淆版代码

通过 Cloudflare Pages 而非 Workers 部署,配合混淆版代码可以成功绕过限制。

为什么 Pages 可以工作

  1. Pages Functions 对 TCP Sockets 有更好的兼容性
  2. 混淆版代码经过特殊处理,避免了某些检测机制
  3. Direct Upload API 方式部署更加可靠

前置准备

1. Cloudflare 账户

2. API Token

创建具有 Pages 权限的 API Token:

  1. 访问 https://dash.cloudflare.com/profile/api-tokens
  2. 点击 "Create Token"
  3. 选择 "Edit Cloudflare Workers" 模板,或自定义权限:
    • Account - Cloudflare Pages - Edit
    • Account - Account Settings - Read
  4. 保存生成的 Token

3. 生成 UUID

# Linux/macOS
uuidgen | tr '[:upper:]' '[:lower:]'

# 或使用 Python
python3 -c "import uuid; print(uuid.uuid4())"

# 示例输出: a1b2c3d4-e5f6-7890-abcd-ef1234567890

4. 获取项目代码

git clone https://github.com/yonggekkk/Cloudflare-vless-trojan.git
cd Cloudflare-vless-trojan/Vless_workers_pages

部署步骤

步骤 1:修改 UUID

编辑混淆版文件的第一行,将默认 UUID 改为你生成的 UUID:

# 查看当前 UUID
head -1 "_worker混淆.js"

# 修改 UUID(使用 sed)
sed -i 's/86c50e3a-5b87-49dd-bd20-03c7f2735e40/你的UUID/g' "_worker混淆.js"

# 或手动编辑文件第一行
# let userID = "你的UUID";

步骤 2:准备部署目录

# 创建 Pages 部署目录
mkdir -p pages-deploy

# 复制混淆版文件并重命名为 _worker.js
cp "_worker混淆.js" pages-deploy/_worker.js

# 验证文件
ls -la pages-deploy/

步骤 3:创建 Pages 项目

方法 A:使用 API(推荐)

# 设置变量
ACCOUNT_ID="你的账户ID"
API_TOKEN="你的API Token"
PROJECT_NAME="vless-proxy"  # 项目名称,可自定义

# 创建项目
curl -X POST "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/pages/projects" \
  -H "Authorization: Bearer ${API_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "'${PROJECT_NAME}'",
    "production_branch": "main"
  }'

成功响应示例

{
  "result": {
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "name": "vless-proxy",
    "subdomain": "vless-proxy-xxx.pages.dev",
    ...
  },
  "success": true
}

📝 记录返回的 subdomain,这是你的 Pages 域名

方法 B:使用 Dashboard

  1. 访问 https://dash.cloudflare.com → Workers & Pages
  2. 点击 "Create application" → "Pages"
  3. 选择 "Upload assets"
  4. 输入项目名称,创建项目

步骤 4:部署代码

方法 A:使用 API Direct Upload

cd pages-deploy

# 部署到 Pages
curl -X POST "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/pages/projects/${PROJECT_NAME}/deployments" \
  -H "Authorization: Bearer ${API_TOKEN}" \
  -F "manifest={\"/_worker.js\":{\"hash\":\"$(md5sum _worker.js | cut -d' ' -f1)\",\"size\":$(stat -c%s _worker.js)}}" \
  -F "_worker.js=@_worker.js"

成功响应示例

{
  "result": {
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "url": "https://xxxxxxxx.vless-proxy-xxx.pages.dev",
    "environment": "production",
    ...
  },
  "success": true
}

方法 B:使用 Wrangler CLI

# 安装 wrangler
npm install -g wrangler

# 登录(如果 API Token 方式不工作)
wrangler login

# 部署
wrangler pages deploy pages-deploy --project-name=${PROJECT_NAME}

方法 C:使用 Dashboard 上传

  1. 进入创建的 Pages 项目
  2. 点击 "Upload assets"
  3. 上传 pages-deploy 目录中的 _worker.js 文件
  4. 点击 "Deploy site"

步骤 5:检查部署状态

# 获取部署状态
DEPLOYMENT_ID="部署返回的ID"

curl -s "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/pages/projects/${PROJECT_NAME}/deployments/${DEPLOYMENT_ID}" \
  -H "Authorization: Bearer ${API_TOKEN}" | python3 -c "
import json,sys
d = json.load(sys.stdin)
print('Status:', d['result']['latest_stage']['status'])
print('Stage:', d['result']['latest_stage']['name'])
"

期望输出

Status: success
Stage: deploy

验证部署

1. 测试基本访问

# 替换为你的 Pages 域名
PAGES_DOMAIN="your-project-xxx.pages.dev"

# 测试根路径
curl -s -o /dev/null -w "%{http_code}" "https://${PAGES_DOMAIN}/"
# 期望: 200

2. 访问配置页面

UUID="你的UUID"

# 获取完整配置
curl "https://${PAGES_DOMAIN}/${UUID}"

配置页面包含:

  • VLESS 节点链接
  • 客户端参数说明
  • 订阅链接(通用、Clash、Sing-box 格式)

3. 浏览器访问

打开浏览器访问:

https://你的域名.pages.dev/你的UUID

客户端配置

iOS Stash 配置

VLESS 链接(直接导入)

vless://你的UUID@你的域名.pages.dev:443?encryption=none&security=tls&sni=你的域名.pages.dev&type=ws&host=你的域名.pages.dev&path=%2F%3Fed%3D2560#VLESS-CF-Pages

YAML 配置格式

proxies:
  - name: "VLESS-CF-Pages"
    type: vless
    server: 你的域名.pages.dev
    port: 443
    uuid: 你的UUID
    network: ws
    tls: true
    servername: 你的域名.pages.dev
    skip-cert-verify: false
    ws-opts:
      path: /?ed=2560
      headers:
        Host: 你的域名.pages.dev

Clash Meta / Mihomo 配置

proxies:
  - name: CF-VLESS
    type: vless
    server: 你的域名.pages.dev
    port: 443
    uuid: 你的UUID
    network: ws
    tls: true
    udp: true
    servername: 你的域名.pages.dev
    ws-opts:
      path: /?ed=2560
      headers:
        Host: 你的域名.pages.dev

V2rayN / V2rayNG 配置

参数
地址 (address) 你的域名.pages.dev
端口 (port) 443
用户ID (uuid) 你的UUID
传输协议 ws
伪装域名 (host) 你的域名.pages.dev
路径 (path) /?ed=2560
传输安全 (TLS) tls
SNI 你的域名.pages.dev

可用端口

HTTPS 端口(推荐):

  • 443, 8443, 2053, 2083, 2087, 2096

HTTP 端口(不推荐,无加密):

  • 80, 8080, 8880, 2052, 2082, 2086, 2095

常见问题

Q1: 部署后访问返回 Error 1101

原因:使用了明文版代码,或混淆版代码未正确部署

解决

  1. 确认使用的是 _worker混淆.js 而非 _worker.js
  2. 确认通过 Pages 而非 Workers 部署
  3. 重新创建 Pages 项目并部署

Q2: Wrangler 认证失败

原因:API Token 权限不足或过期

解决

  1. 使用 Direct Upload API 方式部署
  2. 或使用 wrangler login 浏览器授权
  3. 检查 Token 是否有 Pages Edit 权限

Q3: 配置页面显示但代理不工作

可能原因

  1. 客户端配置参数错误
  2. UUID 不匹配
  3. 网络环境问题

排查步骤

  1. 核对所有参数(特别是 UUID、host、path)
  2. 尝试不同端口(443 → 8443 → 2053)
  3. 使用配置页面提供的现成链接

Q4: 如何更新 UUID?

# 1. 修改源文件
sed -i 's/旧UUID/新UUID/g' "_worker混淆.js"

# 2. 重新准备部署目录
cp "_worker混淆.js" pages-deploy/_worker.js

# 3. 重新部署
curl -X POST "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/pages/projects/${PROJECT_NAME}/deployments" \
  -H "Authorization: Bearer ${API_TOKEN}" \
  -F "manifest={\"/_worker.js\":{\"hash\":\"$(md5sum _worker.js | cut -d' ' -f1)\",\"size\":$(stat -c%s _worker.js)}}" \
  -F "_worker.js=@_worker.js"

Q5: 如何自定义 ProxyIP?

混淆版文件第二行可以修改 ProxyIP:

const proxyIPs = ["your-proxyip.example.com"]; // 修改为你的 ProxyIP

ProxyIP 用于访问 Cloudflare 自有网站(如 ChatGPT、Twitter 等)


部署脚本(一键部署)

将以下脚本保存为 deploy.sh

#!/bin/bash

# 配置变量
ACCOUNT_ID="${CLOUDFLARE_ACCOUNT_ID}"
API_TOKEN="${CLOUDFLARE_TOKEN}"
PROJECT_NAME="vless-proxy"
UUID=$(uuidgen | tr '[:upper:]' '[:lower:]')

echo "=== Cloudflare Pages VLESS 部署脚本 ==="
echo "Account ID: ${ACCOUNT_ID}"
echo "Project: ${PROJECT_NAME}"
echo "UUID: ${UUID}"
echo ""

# 检查文件
if [ ! -f "_worker混淆.js" ]; then
    echo "错误: 找不到 _worker混淆.js 文件"
    exit 1
fi

# 准备部署目录
echo ">>> 准备部署文件..."
mkdir -p pages-deploy
sed "s/86c50e3a-5b87-49dd-bd20-03c7f2735e40/${UUID}/g" "_worker混淆.js" > pages-deploy/_worker.js

# 创建 Pages 项目
echo ">>> 创建 Pages 项目..."
CREATE_RESULT=$(curl -s -X POST "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/pages/projects" \
  -H "Authorization: Bearer ${API_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"name": "'${PROJECT_NAME}'", "production_branch": "main"}')

if echo "$CREATE_RESULT" | grep -q '"success":true'; then
    SUBDOMAIN=$(echo "$CREATE_RESULT" | grep -o '"subdomain":"[^"]*"' | cut -d'"' -f4)
    echo "项目创建成功: ${SUBDOMAIN}"
else
    echo "项目可能已存在,继续部署..."
    SUBDOMAIN="${PROJECT_NAME}.pages.dev"
fi

# 部署代码
echo ">>> 部署代码..."
cd pages-deploy
DEPLOY_RESULT=$(curl -s -X POST "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/pages/projects/${PROJECT_NAME}/deployments" \
  -H "Authorization: Bearer ${API_TOKEN}" \
  -F "manifest={\"/_worker.js\":{\"hash\":\"$(md5sum _worker.js | cut -d' ' -f1)\",\"size\":$(stat -c%s _worker.js)}}" \
  -F "_worker.js=@_worker.js")

if echo "$DEPLOY_RESULT" | grep -q '"success":true'; then
    echo ""
    echo "=== 部署成功 ==="
    echo "Pages 域名: https://${SUBDOMAIN}"
    echo "配置页面: https://${SUBDOMAIN}/${UUID}"
    echo "UUID: ${UUID}"
    echo ""
    echo "VLESS 链接:"
    echo "vless://${UUID}@${SUBDOMAIN}:443?encryption=none&security=tls&sni=${SUBDOMAIN}&type=ws&host=${SUBDOMAIN}&path=%2F%3Fed%3D2560#VLESS-CF"
else
    echo "部署失败:"
    echo "$DEPLOY_RESULT"
    exit 1
fi

使用方法

export CLOUDFLARE_ACCOUNT_ID="你的账户ID"
export CLOUDFLARE_TOKEN="你的API Token"
chmod +x deploy.sh
./deploy.sh

参考资源


更新日志

日期 更新内容
2026-01-26 初始版本,完整记录 Pages + 混淆版部署方案

📝 注意:本文档仅供学习研究使用,请遵守当地法律法规。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment