← Cloudflare Workers VPC / workers-vpc / examples
Маршрутизация к частным сервисам из Workers
В этом примере показано, как использовать Workers VPC для создания централизованного шлюза, который маршрутизирует запросы на основе путей URL, обеспечивает аутентификацию и ограничение частоты запросов, а также распределяет нагрузку между внутренними сервисами.
Предварительные требования
- Несколько приватных API или сервисов, работающих в вашей VPC/виртуальной сети (мы используем сервис пользователей и сервис заказов)
- Настроенный и запущенный Cloudflare Tunnel (следуйте Руководство «Начало работы» чтобы настроить или создать туннель в панели управления ↗)
- Аккаунт Workers с доступом к Workers VPC
1. Создайте VPC Services
Сначала создайте сервисы для внутренних API с помощью hostname:
# Create user service
npx wrangler vpc service create user-service \
--type http \
--tunnel-id <YOUR_TUNNEL_ID> \
--hostname user-api.internal.example.com
# Create orders service
npx wrangler vpc service create order-service \
--type http \
--tunnel-id <YOUR_TUNNEL_ID> \
--hostname orders-api.internal.example.comЗапишите ID сервисов, возвращённые для следующего шага.
2. Настройка Worker
Обновите файл конфигурации Wrangler:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "api-gateway",
"main": "src/index.js",
// Set this to today's date
"compatibility_date": "2026-08-28",
"vpc_services": [
{
"binding": "USER_SERVICE",
"service_id": "<YOUR_USER_SERVICE_ID>"
},
{
"binding": "ORDER_SERVICE",
"service_id": "<YOUR_ORDER_SERVICE_ID>"
}
]
}"$schema" = "./node_modules/wrangler/config-schema.json"
name = "api-gateway"
main = "src/index.js"
# Set this to today's date
compatibility_date = "2026-08-28"
[[vpc_services]]
binding = "USER_SERVICE"
service_id = "<YOUR_USER_SERVICE_ID>"
[[vpc_services]]
binding = "ORDER_SERVICE"
service_id = "<YOUR_ORDER_SERVICE_ID>"3. Реализуйте Worker
В коде Workers используйте привязки VPC Service, чтобы направлять запросы к нужным сервисам:
index.js
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);
// Route to internal services
if (url.pathname.startsWith('/api/users')) {
const response = await env.USER_SERVICE.fetch("https://user-api.internal.example.com" + url.pathname);
return response;
} else if (url.pathname.startsWith('/api/orders')) {
const response = await env.ORDER_SERVICE.fetch("https://orders-api.internal.example.com" + url.pathname);
return response;
}
return new Response('Not Found', { status: 404 });
},
};4. Разверните и протестируйте
Теперь можно развернуть и протестировать Worker:
npx wrangler deploy# Test user service requests
curl https://api-gateway.workers.dev/api/users
# Test orders service requests
curl https://api-gateway.workers.dev/api/ordersСледующие шаги
- Добавить аутентификация и авторизация
- Реализуйте ограничение частоты запросов
- Настройка мониторинг и оповещения
- Изучите другие примеры