Skip to content

servless/vpcsite

Repository files navigation

VPC Site Proxy

基于 Cloudflare Workers 的私有网络 (VPC) 动态站点代理服务。通过 Cloudflare KV 实现无需重新部署代码即可动态管理多个站点和后端路由。

部署

Deploy to Cloudflare Workers

核心特性

  • 动态路由:基于域名 (Hostname) 动态匹配后端服务器。
  • KV 存储:配置存储于 Workers KV,读取性能极高且支持即时更新。
  • VPC 集成:通过 Cloudflare VPC Service 访问内网资源。
  • 无状态部署:代码逻辑与业务配置分离。

创建 VPC Service

方法一

访问 https://dash.cloudflare.com/<>/workers/vpc/services , 依次点击 Create -> Create VPC Service

# Service name:服务名(随便填)
# Tunnel:选择上述创建的 Tunnel 服务
# Host or IP address:目标服务所在的内网 IP(相对于 Tunnel 服务部署位置访问本 Service 的访问方式)
# Ports:选择或自定义指定本服务的端口

方法二

使用命令行

npx wrangler vpc service create my-private-api \
  --type http \
  --tunnel-id <YOUR_TUNNEL_ID> \
  --hostname <YOUR_HOSTNAME> \
  --http-port <PORT> \
  --https-port <PORT>

或者 IP 方式

npx wrangler vpc service create my-private-api \
  --type http \
  --tunnel-id <YOUR_TUNNEL_ID> \
  --ipv4 <YOUR_IPV4_ADDRESS> \
  --ipv6 <YOUR_IPV6_ADDRESS> \
  --http-port <PORT> \
  --https-port <PORT>

创建 Workers 项目

根据文档创建 Workers https://developers.cloudflare.com/workers-vpc/get-started/

  1. 初始化项目
npm create cloudflare@latest -- vpcsite
  1. 依次选择
For What would you like to start with? -> Hello World example.
For Which template would you like to use? -> Worker only.
For Which language do you want to use? -> TypeScript.
For Do you want to use git for version control? -> Yes.
For Do you want to deploy your application? -> No (we will be making some changes before deploying).
  1. 进入项目
cd vpcsite
  1. 将上述获取到的 VPC Service (YOUR_SERVICE_ID)信息填入配置文件 wrangler.jsonc
{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "name": "workers-vpc-app",
  "main": "src/index.ts",
  "compatibility_date": "2026-02-05",
+ "vpc_services": [
+   {
+     "binding": "VPC_SERVICE",
+     "service_id": "<YOUR_SERVICE_ID>"
+   }
+ ]
}

快速开始

1. 初始化 KV 空间

在 Cloudflare 控制台或通过命令行创建一个 KV 命名空间,并将其 ID 填入 wrangler.jsonckv_namespaces 部分。

npx wrangler kv namespace create VPCSERVICE

2. 配置说明

本项目使用 KV 存储站点映射关系。Key 的格式为 site:your-domain.com,Value 为 JSON 字符串。

配置项说明:

  • host: 目标内网服务器的 IP 或 Hostname。
  • port: 目标端口。
  • vpc: wrangler.jsonc 中定义的 VPC Service 绑定名称(如 VPC_SERVICE_OS_2)。

3. 如何添加/更新站点

无需重新部署代码,只需更新 KV 数据:

# 使用命令行更新(推荐)
npx wrangler kv key put --binding=VPCSERVICE "site:api.example.com" '{"host": "10.0.1.5", "port": "8080", "vpc": "VPC_SERVICE_OS_2"}'

4. 部署服务

确保 wrangler.jsonc 中的 account_id 和 KV id 已正确配置。

npm run deploy

项目结构

  • src/index.ts: 核心代理逻辑。
  • wrangler.jsonc: Cloudflare Workers 配置文件,包含 VPC 和 KV 绑定。
  • test/: 集成测试用例。

故障排查

  • 404 Not Found: 表示 KV 中没有找到对应域名的配置。请检查 KV 中的 Key 是否以 site: 开头且域名拼写正确。
  • 500 Internal Server Error: 通常是指定的 VPC 绑定名称在 wrangler.jsonc 中不存在。

仓库镜像

MyCodeGitCodeGitHub

About

VPC Site Proxy

Resources

Stars

Watchers

Forks