本文档详细记录了如何在 Cloudflare 免费账户上成功部署 VLESS 代理的完整步骤。
在 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| 版本 | 文件 | 状态 | 说明 |
|---|---|---|---|
| 明文版 | _worker.js |
❌ 不可用 | 直接使用会触发 1101 |
| 混淆版 | _worker混淆.js |
✅ 可用 | 经过混淆处理,可正常部署 |
通过 Cloudflare Pages 而非 Workers 部署,配合混淆版代码可以成功绕过限制。
为什么 Pages 可以工作:
- Pages Functions 对 TCP Sockets 有更好的兼容性
- 混淆版代码经过特殊处理,避免了某些检测机制
- Direct Upload API 方式部署更加可靠
- 注册免费账户:https://dash.cloudflare.com/sign-up
- 获取 Account ID(在 Workers & Pages 页面右侧可见)
创建具有 Pages 权限的 API Token:
- 访问 https://dash.cloudflare.com/profile/api-tokens
- 点击 "Create Token"
- 选择 "Edit Cloudflare Workers" 模板,或自定义权限:
Account - Cloudflare Pages - EditAccount - Account Settings - Read
- 保存生成的 Token
# Linux/macOS
uuidgen | tr '[:upper:]' '[:lower:]'
# 或使用 Python
python3 -c "import uuid; print(uuid.uuid4())"
# 示例输出: a1b2c3d4-e5f6-7890-abcd-ef1234567890git clone https://github.com/yonggekkk/Cloudflare-vless-trojan.git
cd Cloudflare-vless-trojan/Vless_workers_pages编辑混淆版文件的第一行,将默认 UUID 改为你生成的 UUID:
# 查看当前 UUID
head -1 "_worker混淆.js"
# 修改 UUID(使用 sed)
sed -i 's/86c50e3a-5b87-49dd-bd20-03c7f2735e40/你的UUID/g' "_worker混淆.js"
# 或手动编辑文件第一行
# let userID = "你的UUID";# 创建 Pages 部署目录
mkdir -p pages-deploy
# 复制混淆版文件并重命名为 _worker.js
cp "_worker混淆.js" pages-deploy/_worker.js
# 验证文件
ls -la pages-deploy/方法 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
- 访问 https://dash.cloudflare.com → Workers & Pages
- 点击 "Create application" → "Pages"
- 选择 "Upload assets"
- 输入项目名称,创建项目
方法 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 上传
- 进入创建的 Pages 项目
- 点击 "Upload assets"
- 上传
pages-deploy目录中的_worker.js文件 - 点击 "Deploy site"
# 获取部署状态
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
# 替换为你的 Pages 域名
PAGES_DOMAIN="your-project-xxx.pages.dev"
# 测试根路径
curl -s -o /dev/null -w "%{http_code}" "https://${PAGES_DOMAIN}/"
# 期望: 200UUID="你的UUID"
# 获取完整配置
curl "https://${PAGES_DOMAIN}/${UUID}"配置页面包含:
- VLESS 节点链接
- 客户端参数说明
- 订阅链接(通用、Clash、Sing-box 格式)
打开浏览器访问:
https://你的域名.pages.dev/你的UUID
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.devproxies:
- 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| 参数 | 值 |
|---|---|
| 地址 (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
原因:使用了明文版代码,或混淆版代码未正确部署
解决:
- 确认使用的是
_worker混淆.js而非_worker.js - 确认通过 Pages 而非 Workers 部署
- 重新创建 Pages 项目并部署
原因:API Token 权限不足或过期
解决:
- 使用 Direct Upload API 方式部署
- 或使用
wrangler login浏览器授权 - 检查 Token 是否有 Pages Edit 权限
可能原因:
- 客户端配置参数错误
- UUID 不匹配
- 网络环境问题
排查步骤:
- 核对所有参数(特别是 UUID、host、path)
- 尝试不同端口(443 → 8443 → 2053)
- 使用配置页面提供的现成链接
# 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"混淆版文件第二行可以修改 ProxyIP:
const proxyIPs = ["your-proxyip.example.com"]; // 修改为你的 ProxyIPProxyIP 用于访问 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- 项目仓库: https://github.com/yonggekkk/Cloudflare-vless-trojan
- 甬哥博客: https://ygkkk.blogspot.com/2023/07/cfworkers-vless.html
- 视频教程: https://youtu.be/QSFaP5EVI04
- Cloudflare Pages 文档: https://developers.cloudflare.com/pages/
| 日期 | 更新内容 |
|---|---|
| 2026-01-26 | 初始版本,完整记录 Pages + 混淆版部署方案 |
📝 注意:本文档仅供学习研究使用,请遵守当地法律法规。