Cloudflare DNS + Workers + Tunnels — три сервиса, которые закрывают большую часть инфраструктуры разработчика на бесплатном тарифе: домены и проксирование, серверный код на Edge, доступ к localhost из интернета без белого IP. Каждый из них работает самостоятельно, но вместе они дают связку, которой раньше нужен был VPS, Nginx, Let’s Encrypt и проброс портов.
Если вы запускаете пет-проект, делаете MVP для клиента или поднимаете self-hosted инструменты (n8n, Gitea, Home Assistant, Grafana) — эта тройка закрывает почти всё. Платный тариф нужен только когда вы упираетесь в лимиты или хотите завести команду из десятков человек за Cloudflare Access.
Этот материал — практический разбор всех трёх сервисов в одном месте. Что внутри каждого, как устроено, какие лимиты на бесплатном тарифе, как быстро поднять и какие подводные камни ждут на каждом шаге. В конце — общий чеклист и ссылки на документацию.
Что это
Это связка из трёх бесплатных сервисов Cloudflare, которая закрывает задачи, для которых раньше нужны были отдельный VPS, Nginx, Let’s Encrypt и настройка файрвола.
- Cloudflare DNS — самый быстрый публичный DNS-хостинг в мире. Бесплатный, без лимитов на число записей. Даёт DDoS-защиту, проксирование трафика, автоматический SSL и доступ ко всем остальным сервисам Cloudflare.
- Cloudflare Workers — платформа для запуска серверного кода на Edge-серверах Cloudflare. Пишете функцию на JavaScript или TypeScript, деплоите — она работает по всему миру без серверов, без контейнеров, без DevOps.
- Cloudflare Tunnels — сервис, который создаёт зашифрованное соединение от вашего локального сервера к сети Cloudflare. Без белого IP, без проброса портов, без настройки NAT. localhost становится доступен по вашему домену.
Зачем нужно
Связка DNS + Workers + Tunnels закрывает почти все базовые задачи, для которых раньше нужен был платный VPS, отдельный Nginx и ручной выпуск сертификатов.
- Поднять сайт с custom-доменом за 10 минут — DNS + Pages дают HTTPS из коробки без Let’s Encrypt и cron.
- Скрыть API-ключи от внешних сервисов — Workers проксирует запросы и хранит секреты в зашифрованных переменных окружения.
- Поднять Telegram-бот или обработчик вебхуков без своего сервера — Worker на Edge работает по всему миру с cold start меньше миллисекунды.
- Показать заказчику localhost по красивому URL — Tunnel даёт временный или постоянный домен без белого IP и проброса портов.
- Поднять self-hosted сервисы (n8n, Gitea, Grafana, Home Assistant) и закрыть их авторизацией через Cloudflare Access — до 50 пользователей бесплатно.
- Получить глобальный CDN, защиту от DDoS и SSL без переговоров с хостером — оранжевое облако включается одним кликом.
Как устроено
Cloudflare DNS
DNS (Domain Name System) — система, которая превращает доменное имя (mysite.ru) в IP-адрес сервера. Cloudflare DNS — один из самых быстрых и надёжных публичных DNS-хостингов в мире. Бесплатный, без ограничений по числу записей и доменов. Серверы Cloudflare стоят в 330+ дата-центрах, и запрос пользователя отвечает ближайший — поэтому разрешение имён идёт за единицы миллисекунд.
Когда вы переносите домен на Cloudflare DNS, вы получаете не только быстрый DNS, но и DDoS-защиту на уровне DNS, проксирование трафика через Cloudflare (CDN, WAF, автоматический SSL), удобную панель записей и интеграцию со всеми остальными сервисами — Workers, Pages, Tunnels, Access.
Ключевое правило: Cloudflare DNS — фундамент. Без переноса домена на Cloudflare нельзя использовать Workers Routes, автоматический SSL для Pages и привязку домена к Tunnel. Можно держать домен у регистратора и прописать Cloudflare secondary, но часть функций тогда отключается.
Типы DNS-записей
Каждая DNS-запись — инструкция для интернета: куда отправлять запросы к вашему домену. Базовых типов семь, для большинства проектов хватает четырёх.
| Тип | Для чего | Пример значения |
|---|---|---|
| A | Указывает IPv4-адрес сервера | 203.0.113.50 |
| AAAA | Указывает IPv6-адрес сервера | 2001:db8::1 |
| CNAME | Алиас — перенаправляет на другой домен | mysite.pages.dev |
| MX | Почтовый сервер для домена | mx1.mailprovider.com |
| TXT | Текстовая запись (SPF, DKIM, верификация) | v=spf1 include:_spf.google.com ~all |
| NS | Nameserver-серверы домена | anna.ns.cloudflare.com |
| SRV | Служебная запись (порт + приоритет) | Для VoIP, игровых серверов |
| CAA | Какие центры сертификации могут выпускать SSL | letsencrypt.org |
Оранжевое облако: проксирование vs DNS-only
Главная фича Cloudflare DNS — переключатель проксирования (оранжевое или серое облако). Именно он решает, идёт ли трафик через CDN и защиту Cloudflare или напрямую к вашему серверу.
flowchart LR
A["Посетитель"] --> B{"Оранжевое облако?"}
B -->|Да| C["Cloudflare CDN"]
C --> D["Ваш сервер"]
B -->|Нет| D
Оранжевое облако (Proxied)
- IP сервера скрыт — в логах видны только IP Cloudflare, реальный адрес не утекает.
- Работает CDN — статика кэшируется на 330+ дата-центрах и отдаётся ближайшим.
- Включается DDoS-защита, WAF и Bot Fight Mode.
- Автоматический SSL-сертификат — Cloudflare сам выпускает и обновляет.
- Работают Page Rules, Redirect Rules, Transform Rules.
Серое облако (DNS only)
Cloudflare работает как обычный DNS — возвращает реальный IP сервера и не вмешивается в трафик. Нет CDN, нет защиты, нет SSL от Cloudflare. Посетитель подключается к серверу напрямую, и IP видно всем.
Когда что включать
| Запись | Облако | Почему |
|---|---|---|
| A / CNAME для сайта | Оранжевое | CDN, защита, SSL |
| A / CNAME для API | Оранжевое | Защита, скрытие IP |
| MX (почта) | Серое | Почтовые серверы не работают через прокси |
| A для SSH / FTP | Серое | Cloudflare проксирует только HTTP/HTTPS |
| CNAME для Tunnel | Оранжевое | Tunnel работает через прокси |
| TXT (SPF, DKIM) | — | TXT не поддерживает проксирование |
Важно: никогда не включайте оранжевое облако для MX-записей. Почта перестанет работать. Cloudflare проксирует только HTTP/HTTPS — для SMTP, IMAP, POP3 нужен прямой доступ к почтовому серверу.
Перенос домена на Cloudflare DNS
Перенос означает: вы меняете nameservers у регистратора домена, чтобы Cloudflare стал авторитетным DNS-сервером. Сам домен остаётся у регистратора — меняется только то, кто отвечает за DNS.
- Откройте dash.cloudflare.com и нажмите Add a site. Введите домен и выберите план Free. Cloudflare просканирует существующие DNS-записи.
- Проверьте записи. Cloudflare импортирует их автоматически, но сверьте: A-запись основного домена, CNAME для www, MX-записи (облако должно быть серым), TXT-записи (SPF, DKIM, верификация Google или Яндекс).
- Замените nameservers у регистратора. Cloudflare выдаст два NS-адреса вида
anna.ns.cloudflare.comиbob.ns.cloudflare.com(имена уникальны для каждого домена) — их нужно прописать в панели регистратора.
| Регистратор | Где менять |
|---|---|
| Reg.ru | Домены → Управление → DNS-серверы |
| Namecheap | Domain List → Manage → Nameservers → Custom DNS |
| GoDaddy | My Products → DNS → Nameservers → Change |
| Beget | Домены → DNS |
| TimeWeb | Домены и поддомены → NS серверы |
- Дождитесь активации. Обычно 10–30 минут, максимум 24 часа. Cloudflare пришлёт email. После активации домен управляется через Cloudflare, автоматически выпускается SSL-сертификат и доступны все остальные сервисы Cloudflare.
Практические настройки DNS
Подключение сайта к серверу. Тип A, имя @, значение — IPv4 сервера, облако оранжевое. Для www — CNAME на основной домен, облако оранжевое.
Подключение Cloudflare Pages. Тип CNAME, имя @ (или нужный поддомен), значение — your-project.pages.dev, облако оранжевое.
Настройка почты через Google Workspace. Тип MX, имя @, значение aspmx.l.google.com с приоритетом 1, облако серое. Плюс TXT с v=spf1 include:_spf.google.com ~all.
Email Routing (пересылка на Gmail). Настраивается в разделе Email → Email Routing — Cloudflare сам создаст нужные MX-записи.
Подключение Tunnel. Если создаёте Tunnel через дашборд, Cloudflare автоматически создаст CNAME-запись с tunnel-id.cfargotunnel.com. Вручную добавлять не нужно.
Полезные фичи DNS
- DNSSEC — защита от подмены DNS-ответов. Включается одной кнопкой: DNS → Settings → Enable DNSSEC. После включения нужно добавить DS-запись у регистратора (Cloudflare покажет параметры).
- Always Use HTTPS — перенаправляет все HTTP-запросы на HTTPS. Включается в SSL/TLS → Edge Certificates → Always Use HTTPS.
- Wildcard-записи — запись *.mysite.ru перенаправляет все поддомены на один IP или CNAME. Полезно для мультитенантных приложений.
Cloudflare Workers
Cloudflare Workers — платформа для запуска серверного кода на Edge-серверах Cloudflare. Код выполняется на ближайшем к пользователю сервере из 330+ дата-центров. Проще говоря: пишете функцию на JavaScript или TypeScript, деплоите — и она работает по всему миру без серверов, без контейнеров, без DevOps.
Чаще всего Workers используют для:
- API-прокси — скрыть ключи от клиента, добавить CORS.
- Редиректы — сложная логика перенаправлений без Page Rules.
- Обработка вебхуков — принять данные от Telegram, Stripe, GitHub.
- Telegram-бот — бот целиком на Workers, без сервера.
- SSR — серверный рендеринг для фронтенд-фреймворков.
- A/B тестирование — разные версии страницы для разных пользователей.
- Геолокация — контент на основе страны или города посетителя.
Быстрый старт: первый Worker за 5 минут
Шаг 1. Установите CLI и авторизуйтесь.
npm install -g wrangler
wrangler login
Шаг 2. Создайте проект из шаблона Hello World.
npm create cloudflare@latest my-worker
cd my-worker
Шаг 3. Откройте src/index.ts и замените содержимое.
export default {
async fetch(request) {
return new Response("Привет из Cloudflare Workers!", {
headers: { "Content-Type": "text/plain;charset=UTF-8" },
});
},
};
Шаг 4. Запустите локально и проверьте ответ на http://localhost:8787.
wrangler dev
Шаг 5. Задеплойте. Worker будет доступен по адресу https://my-worker.
wrangler deploy
Хранилища Workers
У Workers четыре типа хранилищ. Для большинства задач хватает KV, но у каждого своя ниша.
| Хранилище | Тип | Для чего | Бесплатно |
|---|---|---|---|
| KV | Key-value | Конфиги, кэш, сессии | 1 ГБ, 100K чтений/день |
| R2 | Object storage | Файлы, картинки, бэкапы | 10 ГБ, egress бесплатно |
| D1 | SQLite | Реляционные данные | 5 ГБ |
| Durable Objects | Stateful | Чаты, счётчики, координация | Только платный план |
KV — key-value хранилище
Workers KV — глобальное хранилище ключ-значение. Данные реплицируются по всем Edge-серверам. Идеально для конфигурации, кэша и небольших данных.
Создание namespace:
wrangler kv namespace create MY_KV
Привязка в wrangler.toml:
[[kv_namespaces]]
binding = "MY_KV"
id = "<namespace-id>"
Использование в коде:
export default {
async fetch(request, env) {
// Записать
await env.MY_KV.put("user:123", JSON.stringify({
name: "Sergey",
plan: "free"
}));
// Прочитать
const user = await env.MY_KV.get("user:123", "json");
// Удалить
await env.MY_KV.delete("user:123");
return Response.json(user);
},
};
Лимиты KV и Workers на бесплатном тарифе
| Параметр | Free | Paid ($5/мес Workers) |
|---|---|---|
| KV: чтений в день | 100 000 | Безлимитно |
| KV: записей в день | 1 000 | Безлимитно |
| KV: хранилище | 1 ГБ | Безлимитно |
| KV: макс. размер значения | 25 МБ | 25 МБ |
| KV: макс. размер ключа | 512 байт | 512 байт |
| Workers: запросов в день | 100 000 | 10 миллионов (включено) |
| Workers: CPU time / запрос | 10 мс | 30 с |
| Workers: размер скрипта | 1 МБ | 10 МБ |
| Workers: количество Workers | 100 | 500 |
| Workers: Cron Triggers | 5 | 5 |
| Workers: cold start | < 1 мс | < 1 мс |
100 000 запросов в день — это много. Для API-прокси, ботов, редиректов и обработки форм бесплатного тарифа хватает с большим запасом. KV оптимизирован под чтение — записи eventual-consistent, изменение может стать видимым на всех серверах через 30–60 секунд. Для частых записей используйте Durable Objects или D1.
Cloudflare Tunnels
Cloudflare Tunnel (раньше назывался Argo Tunnel) — сервис, который создаёт зашифрованное соединение между вашим локальным сервером и глобальной сетью Cloudflare. Без белого IP, без проброса портов, без настройки NAT.
flowchart LR
A["Посетитель"] --> B["Cloudflare CDN"]
B --> C["Tunnel"]
C --> D["cloudflared на вашем сервере"]
D --> E["localhost:3000"]
На вашем сервере запускается демон cloudflared. Он устанавливает исходящее соединение с Cloudflare (не входящее!), Cloudflare привязывает поддомен к этому туннелю. Посетитель заходит на app.mysite.ru → Cloudflare → туннель → ваш localhost. Весь трафик идёт через Cloudflare с SSL, CDN и защитой. Ваш IP скрыт. Порты закрыты.
Важно: cloudflared устанавливает только исходящие подключения. Не нужно открывать порты на файрволе или роутере. Это безопаснее, чем проброс портов — ваш сервер вообще не светится в интернете.
Зачем нужен Tunnel
- Показать localhost заказчику — разрабатываете на ноутбуке, клиент видит результат по красивому URL.
- Домашний NAS — доступ к Synology, TrueNAS, Raspberry Pi из интернета без белого IP.
- Webhook для разработки — Telegram, Stripe, GitHub шлют вебхуки на ваш localhost.
- Self-hosted инструменты — Grafana, Gitea, n8n, Home Assistant доступны по HTTPS.
- Staging-сервер — показать staging-версию проекта без деплоя на хостинг.
- SSH без белого IP — безопасный доступ к серверу через Cloudflare Access.
Быстрый старт: Tunnel за 5 минут
Вариант 1. Через дашборд (рекомендуется для новичков):
- Откройте dash.cloudflare.com → Zero Trust → Networks → Tunnels.
- Нажмите Create a tunnel, выберите Cloudflared, задайте имя.
- Скопируйте команду установки cloudflared для вашей ОС и запустите её на сервере — туннель подключится автоматически.
- Добавьте Public hostname: поддомен → http://localhost:3000. Готово — app.mysite.ru ведёт на localhost:3000.
Вариант 2. Через CLI. Установка cloudflared:
# macOS
brew install cloudflared
# Ubuntu/Debian
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb
# Windows
winget install Cloudflare.cloudflared
# Авторизация
cloudflared tunnel login
# Создание туннеля
cloudflared tunnel create my-tunnel
# Привязка DNS
cloudflared tunnel route dns my-tunnel app.mysite.ru
# Запуск
cloudflared tunnel --url http://localhost:3000 run my-tunnel
Конфигурация через файл
Для постоянной работы создайте ~/.cloudflared/config.yml. Один туннель может обслуживать несколько поддоменов — в ingress перечислите все hostname, cloudflared будет маршрутизировать запросы к нужному сервису.
tunnel: <tunnel-id>
credentials-file: /root/.cloudflared/<tunnel-id>.json
ingress:
# Веб-приложение
- hostname: app.mysite.ru
service: http://localhost:3000
# NAS
- hostname: nas.mysite.ru
service: https://192.168.1.100:5001
originRequest:
noTLSVerify: true
# Grafana
- hostname: grafana.mysite.ru
service: http://localhost:3001
# Обязательное правило по умолчанию
- service: http_status:404
cloudflared tunnel run my-tunnel
Tunnel как системный сервис
Чтобы туннель пережил перезагрузку сервера, ставим его как системный сервис.
# Linux
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
# macOS
sudo cloudflared service install
sudo launchctl load /Library/LaunchDaemons/com.cloudflare.cloudflared.plist
Quick Tunnel
Для быстрого показа localhost без настройки домена и авторизации — Quick Tunnel. Cloudflare выдаст временный URL вроде https://random-words.trycloudflare.com. Работает, пока запущена команда.
cloudflared tunnel --url http://localhost:3000
Подходит для быстрой демонстрации, тестирования вебхуков, показа прототипа коллеге. Для постоянного доступа используйте именованный туннель с привязкой к домену — Quick Tunnel временный, URL меняется при каждом запуске.
Практические сценарии
- Домашний NAS (Synology). Установите cloudflared на NAS (Docker или пакет), создайте туннель через дашборд, добавьте hostname nas.mysite.ru → https://localhost:5001, включите noTLSVerify: true (у Synology самоподписанный сертификат). Опционально: добавьте Cloudflare Access для авторизации.
- Webhook для разработки. Запустите Quick Tunnel, получите URL, укажите его как webhook URL в Telegram, Stripe или GitHub — запросы приходят на ваш localhost.
- Home Assistant. Создайте туннель, hostname home.mysite.ru → http://localhost:8123, в configuration.yaml добавьте http.use_x_forwarded_for: true и trusted_proxies с 0.0.0.0/0.
- n8n (self-hosted автоматизация). Hostname n8n.mysite.ru → http://localhost:5678. Добавьте Cloudflare Access, чтобы закрыть доступ посторонним.
Tunnel + Cloudflare Access
Cloudflare Access позволяет закрыть доступ к Tunnel за авторизацию. Бесплатно до 50 пользователей. Настройка: Zero Trust → Access → Applications → Add an application, тип Self-hosted, домен grafana.mysite.ru, политика Allow → Emails ending in @mycompany.com. Теперь при заходе на grafana.mysite.ru Cloudflare покажет экран авторизации — только разрешённые пользователи попадут дальше.
Tunnel vs альтернативы
| Параметр | Cloudflare Tunnel | ngrok | Tailscale Funnel |
|---|---|---|---|
| Цена | Бесплатно | Бесплатно (с лимитами) | Бесплатно (с лимитами) |
| Свой домен | Да | Только платно | Нет |
| Несколько хостов | Да (ingress) | Один на туннель | Один |
| CDN и защита | Включены | Нет | Нет |
| Access (авторизация) | 50 пользователей бесплатно | OAuth (платно) | Tailscale ACL |
| Постоянный URL | Да | Только платно | Да |
| Системный сервис | Да | Да (платно) | Да |
Когда использовать
| Ситуация | Подходит ли связка | Почему |
|---|---|---|
| Пет-проект или MVP с custom-доменом | Да | DNS + Pages + Tunnel закрывают всё, хостинг не нужен |
| Telegram-бот, вебхук-обработчик | Да | Worker на Edge + Tunnel для разработки, всё бесплатно |
| Self-hosted n8n / Grafana / Gitea для команды | Да | Tunnel даёт HTTPS, Access закрывает авторизацию |
| Сайт с глобальной аудиторией и CDN | Да | 330+ дата-центров, оранжевое облако включено по умолчанию |
| Демонстрация прототипа заказчику | Да | Quick Tunnel за одну команду, без регистрации домена |
| Высоконагруженный бэкенд с длинными запросами | Нет | Worker CPU time ограничен 10 мс на Free, для долгих задач нужен VPS |
| Реляционные данные с миллионами строк | Нет | D1 ограничен 5 ГБ, для серьёзных нагрузок нужен внешний Postgres |
| Корпоративный сайт с комплаенсом в РФ | Осторожно | Нужно проверить требования по хранению данных и сертификации |
Пример
Полный пример: API-прокси на Workers, который скрывает ключ от внешнего сервиса, плюс редирект для пользователей из России, плюс обработчик Telegram-бота в одном файле.
// Worker: API-прокси с редиректом по геолокации
// Развёртывание: wrangler deploy
// Секреты задаются через: wrangler secret put API_KEY
// wrangler secret put BOT_TOKEN
export default {
async fetch(request, env) {
const url = new URL(request.url);
// Редирект старых URL
const redirects = {
"/old-page": "/new-page",
"/blog/2024": "/archive/2024",
};
if (redirects[url.pathname]) {
return Response.redirect(
`${url.origin}${redirects[url.pathname]}`,
301
);
}
// Геолокация: русскоязычных — на /ru
const country = request.cf?.country;
if (url.pathname === "/" && country === "RU") {
return Response.redirect(`${url.origin}/ru`, 302);
}
// Telegram-бот: POST /bot
if (url.pathname === "/bot" && request.method === "POST") {
const update = await request.json();
const chatId = update.message?.chat?.id;
const text = update.message?.text;
if (chatId && text) {
await fetch(
`https://api.telegram.org/bot${env.BOT_TOKEN}/sendMessage`,
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
chat_id: chatId,
text: `Вы написали: ${text}`,
}),
}
);
}
return new Response("OK");
}
// API-прокси: GET /api/data
if (url.pathname === "/api/data") {
const response = await fetch("https://api.example.com/data", {
headers: {
"Authorization": `Bearer ${env.API_KEY}`,
"Content-Type": "application/json",
},
});
return new Response(response.body, {
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
},
});
}
return new Response("Not found", { status: 404 });
},
};
Установка вебхука. Чтобы Telegram знал, куда слать сообщения, выполните один раз:
curl 'https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://my-bot.example.workers.dev'
Привязка к своему домену: откройте домен в Cloudflare → Workers Routes → добавьте маршрут api.mysite.ru/* → выберите Worker. Убедитесь, что DNS-запись для api.mysite.ru существует (A или CNAME с оранжевым облаком). Теперь https://api.mysite.ru/любой-путь обрабатывается Worker.
Ограничения
Ограничения
Что учитывать
Бесплатный тариф имеет жёсткие лимиты, которые важно знать до запуска.
Workers CPU time на Free
только 10 мс на запрос — тяжёлые вычисления не помещаются, нужен платный тариф ($5/мес).
Workers KV оптимизирован под чтение
записи eventual-consistent, изменение видно на всех серверах через 30–60 секунд.
D1 ограничен 5 ГБ
для серьёзных реляционных данных нужен внешний Postgres (Neon, Supabase, Turso).
Durable Objects только на платном плане
для стейтфул-логики (чаты, счётчики, координация) нужен Workers Paid.
Cloudflare проксирует только HTTP/HTTPS
для почты (MX), SSH, FTP нужно ставить серое облако или использовать отдельные сервисы.
Quick Tunnel
временный, URL меняется при каждом запуске, не подходит для продакшена.
Cloudflare Access бесплатен до 50 пользователей
для команды больше нужен платный план.
Cloudflare как компания подчиняется законам США
для проектов с жёсткими требованиями к локализации данных нужно проверять комплаенс.
Антипаттерны
Антипаттерны
Чего не делать
Частые ошибки, которые ломают работу связки или открывают дыры в безопасности.
Не включать оранжевое облако для MX-записей
почта перестанет ходить, Cloudflare проксирует только HTTP/HTTPS.
Не оставлять дефолтный SSL-режим Flexible — между Cloudflare и сервером трафик идёт по HTTP, ключ API можно перехватить.
Всегда ставьте Full (Strict).
Не открывать SSH/FTP через оранжевое облако — Cloudflare их не проксирует, а серое облако отдаёт IP сервера всем желающим.
Для SSH используйте Cloudflare Access.
Не хранить секреты в коде Worker — только в wrangler secret или Settings
Variables. Код публикуется в Cloudflare и виден в дашборде.
Не использовать KV для частых записей
записи eventual-consistent, изменение видно через 30–60 секунд, счётчики и логи теряют точность.
Не делать Quick Tunnel для продакшена
URL временный и меняется при каждом запуске, для постоянного доступа нужен именованный туннель с привязкой к домену.
Не забывать про ingress-правило по умолчанию — без - service:
http_status:404 cloudflared падает или маршрутизирует запросы некорректно.
Не ставить самоподписанный сертификат на бэкенд без noTLSVerify:
true в ingress — cloudflared не сможет подключиться и вернёт 502.
Чеклист
Чеклист
Проверка перед запуском
Перед запуском пройдитесь по чеклисту — если что-то не отмечено, рабочая связка скорее всего сломается в первый же день.
Домен добавлен в Cloudflare
nameservers заменены у регистратора, активация подтверждена email.
DNS-записи проверены
A, CNAME, MX, TXT импортированы корректно, оранжевое облако включено для веб-записей и выключено для MX.
SSL/TLS режим установлен в Full (Strict)
не Flexible, иначе между Cloudflare и сервером трафик идёт без шифрования.
DNSSEC включён в настройках DNS и DS-запись добавлена у регистратора.
Always Use HTTPS включён в SSL/TLS
Edge Certificates.
wrangler установлен и авторизован
wrangler whoami возвращает ваш account ID.
Первый Worker задеплоен и отвечает Hello на *.workers.dev
sanity check перед привязкой к домену.
Секреты хранятся в Environment Variables
wrangler secret put API_KEY, никаких ключей в коде.
Worker привязан к домену через Workers Routes
DNS-запись для поддомена существует и имеет оранжевое облако.
KV namespace создан
wrangler kv namespace create MY_KV, привязка прописана в wrangler.toml.
cloudflared установлен на сервере
cloudflared —version возвращает версию.
Туннель создан и подключён — виден в Zero Trust
Networks → Tunnels с статусом Healthy.
Public hostname настроен
app.mysite.ru ведёт на нужный localhost-порт и реально открывается в браузере.
cloudflared работает как сервис
systemctl status cloudflared показывает active, переживает перезагрузку.
Cloudflare Access настроен для приватных сервисов
Grafana, n8n, Home Assistant закрыты авторизацией через email или SSO.
Ссылки
Ссылки
Документация и репозитории Cloudflare: