本示例演示了如何访问未暴露在公共互联网上的私有 REST API。在本指南中,我们将为内部 API 配置一个 VPC Service,创建一个向该 API 发出请求的 Worker,并部署该 Worker 以验证我们的更改。
- 在您的 VPC/虚拟网络中运行的虚拟机/EC2 实例
- 在您的 VPC/虚拟网络中运行的私有 API 或网站,并且其安全规则允许运行
cloudflared的虚拟机进行访问 - 具有 Workers VPC 访问权限的 Workers 账户
Cloudflare Tunnel 可创建从您的私有网络到 Cloudflare 的安全连接。该隧道将允许 Worker 安全地访问您的私有资源。
-
导航到 Workers VPC 仪表板 ↗并选择 Tunnels(隧道) 选项卡。
-
选择 Create(创建) 以创建新隧道。
-
输入隧道名称(例如
private-api-tunnel)并选择 Save tunnel(保存隧道)。 -
选择您的操作系统和架构。仪表板将为您的环境提供特定的安装说明。
-
按照提供的命令在您的 VM 上下载并安装
cloudflared,并使用您的唯一令牌执行服务安装命令。
当您的隧道成功连接时,仪表板将会进行确认。记下隧道 ID 供下一步使用。
首先,为您的内部 API 创建一个 Workers VPC Service:
npx wrangler vpc service create api-service \
--type http \
--tunnel-id <YOUR_TUNNEL_ID> \
--ipv4 10.0.1.50 \
--http-port 8080您也可以使用服务的主机名为其创建 VPC Service:
npx wrangler vpc service create api-service \
--type http \
--tunnel-id <YOUR_TUNNEL_ID> \
--hostname internal-hostname.example.com记下返回的服务 ID 供下一步使用。
更新您的 Wrangler 配置文件:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "private-api-gateway",
"main": "src/index.js",
// Set this to today's date
"compatibility_date": "2026-08-17",
"vpc_services": [
{
"binding": "INTERNAL_API",
"service_id": "<YOUR_SERVICE_ID>",
"remote": true
}
]
}"$schema" = "./node_modules/wrangler/config-schema.json"
name = "private-api-gateway"
main = "src/index.js"
# Set this to today's date
compatibility_date = "2026-08-17"
[[vpc_services]]
binding = "INTERNAL_API"
service_id = "<YOUR_SERVICE_ID>"
remote = true在您的 Workers 代码中,使用 VPC Service 绑定以便向服务发送请求:
export default {
async fetch(request, env, ctx) {
try {
// 从内部 API 获取数据并在返回之前对其进行处理
const response = await env.INTERNAL_API.fetch("http://10.0.1.50:8080/api/data");
// 使用私有 API 的响应在返回最终响应之前在 Workers 中执行更多逻辑
return response;
} catch (error) {
return new Response("Service unavailable", { status: 503 });
}
},
};本指南演示了如何在您的 Worker 中创建简单的代理。然而,您可以直接使用 VPC Service 来获取 API,并操作响应以使您能够在 Workers 上构建更完善的全栈和后端功能。
现在,您可以部署并测试您创建的 Worker:
npx wrangler deploy# 测试 GET 请求
curl https://private-api-gateway.workers.dev