Cloudflare
Подключить домен, правильно настроить HTTPS, кэшировать, защищать и разбирать проблемы.
За 30 секунд
Cloudflare стоит между вашими посетителями и вашим сервером. Он хостит ваш DNS, а для проксируемых записей завершает HTTPS в ближайшей к посетителю edge-локации, кэширует файлы, фильтрует атаки и пересылает остальное на ваш origin. При правильной настройке сайт становится быстрее и гораздо устойчивее к попыткам его уронить. При неправильной — вы получаете циклы редиректов и ошибки 52x, поэтому детали ниже важны.
Почему я это использую
- Я ставлю Cloudflare перед сайтами для DNS и базовой защиты от DDoS; это часть моего базового набора безопасности для каждого сервера.
- Бесплатный план даёт CDN, HTTPS на edge, WAF и HTTP/3 — это очень много для небольших и средних проектов.
- Если спрятать IP origin за прокси и пропускать трафик только на порты 80 и 443, поверхность атаки сильно сокращается.
- Мой план — держать DNS всех доменов на Cloudflare, чтобы каждый сайт управлялся и защищался одинаково.
Как это работает
01Пошагово: подключение домена
1) Создайте аккаунт Cloudflare с двухфакторной аутентификацией и добавьте сайт (корневой домен, например example.com). Выберите план; для начала хватит Free. 2) Cloudflare просканирует текущий DNS и импортирует найденные записи. Внимательно сравните их с текущей зоной, потому что сканирование может пропустить записи: проверьте A, AAAA, CNAME, MX, все TXT (SPF, селекторы DKIM, DMARC, верификации) и SRV. 3) Cloudflare выдаст вам два nameserver'а. У регистратора замените текущие nameserver'ы на эти два, а если у регистратора включён DNSSEC, сначала выключите его (позже включите снова уже через Cloudflare). 4) Дождитесь, пока зона станет Active; обычно это минуты, максимум 24 часа. 5) Подготовьте сертификат на origin и режим SSL до включения прокси на важных записях (следующие разделы). 6) Проверьте через dig и curl.
# Nameservers switched?
dig example.com NS +short
# Proxied records return Cloudflare IPs, not your server's
dig example.com A +short
# Response passes through Cloudflare
curl -sI https://example.com/ | grep -iE "server|cf-ray|cf-cache-status"
02Proxied (оранжевое облако) и DNS only (серое облако)
У каждой записи A, AAAA и CNAME есть статус прокси. Proxied означает, что DNS отвечает IP-адресами Cloudflare: посетители подключаются к Cloudflare, а он уже — к вашему origin. Вы получаете кэширование, WAF, защиту от DDoS и скрытый IP origin. DNS only означает, что Cloudflare просто отвечает вашим реальным IP, как любой DNS-хостинг, и никакая защита не работает. Проксируйте хосты сайта (example.com, www). Оставляйте DNS only для того, что не является HTTP или должно доходить до сервера напрямую: почтовые хосты из MX-записей, hostname'ы для SSH или базы данных, сервисы на портах, которые Cloudflare не проксирует. Помните: одна-единственная DNS only запись, указывающая на тот же сервер, раскрывает IP origin, поэтому не создавайте её для адреса веб-сервера без необходимости.
- Proxy: веб-трафик на стандартных портах HTTP(S).
- DNS only: почта, SSH, FTP, игровые или собственные TCP/UDP-сервисы.
- MX-записи не могут указывать на проксируемый hostname.
03Режимы SSL/TLS: почему Full (strict)
Здесь два соединения: посетитель — Cloudflare и Cloudflare — ваш origin. Режим шифрования SSL/TLS управляет вторым. Off: HTTPS нет вообще. Flexible: HTTPS до посетителя и обычный HTTP до вашего сервера; замочек в браузере есть, но трафик до origin не зашифрован, а если origin редиректит HTTP на HTTPS, получается бесконечный цикл. Full: HTTPS до origin, но сертификат не проверяется, поэтому самоподписанный или просроченный проходит — как прошёл бы и злоумышленник посередине. Full (strict): HTTPS до origin, и сертификат обязан быть действительным и соответствовать hostname, выпущенным публичным CA или Origin CA от Cloudflare. Всегда стремитесь к Full (strict). Установите на сервер сертификат Let's Encrypt (certbot) или бесплатный Cloudflare Origin Certificate, а затем переключите режим. Cloudflare также предлагает режим Automatic, который выбирает самый строгий режим, поддерживаемый вашим origin, но явная установка Full (strict) понятнее.
# nginx on the origin with a Cloudflare Origin Certificate
server {
listen 443 ssl;
http2 on;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/cloudflare/example.com.pem;
ssl_certificate_key /etc/ssl/cloudflare/example.com.key;
root /var/www/example/public;
}
04HTTPS везде, кэширование и производительность
В разделе SSL/TLS > Edge Certificates включите Always Use HTTPS — он редиректит каждый запрос http:// прямо на edge — и установите Minimum TLS Version на 1.2. Включайте HSTS только после того, как весь сайт и все подключаемые поддомены работают по HTTPS, и начинайте с короткого max-age: как только браузеры его закэшируют, они откажутся от обычного HTTP. По умолчанию Cloudflare кэширует статические файлы по расширению (изображения, CSS, JS, шрифты) и не кэширует HTML. Cache Rules позволяют это изменить: кэшировать публичный HTML ненадолго, пропускать мимо кэша всё с сессионной cookie, /admin, /api и /checkout, задавать Edge и Browser TTL. Заголовок cf-cache-status показывает HIT, MISS, BYPASS или DYNAMIC. После деплоя очищайте кэш по URL, а лучше используйте версионированные имена файлов, чтобы очистка требовалась редко. HTTP/3 и Brotli на текущих планах включены по умолчанию.
- Никогда не кэшируйте страницы, зависящие от cookie или состояния входа.
- Для проверки изменений используйте Development Mode или очистку кэша; не отключайте кэширование глобально.
- Осторожнее с Rocket Loader и трюками с минификацией HTML — они могут сломать JavaScript-приложения; сначала тестируйте.
05Безопасность: WAF, rate limiting, DDoS, закрытие origin
Защита от DDoS — сетевых и HTTP-флудов — для проксируемого трафика включена автоматически на любом плане. Managed WAF ruleset (на платных планах наборы правил шире) блокирует распространённые атаки, например шаблоны SQL-инъекций. Custom rules позволяют блокировать или проверять запросы по стране, пути, user agent или bot score — например, managed challenge на /wp-login.php или /admin для запросов не из ожидаемых стран. Правила rate limiting ограничивают число запросов с одного IP к чувствительным эндпоинтам: логин, OTP, сброс пароля. Bot Fight Mode добавляет базовую защиту от ботов. Прокси помогает, только если атакующие не могут достучаться до origin напрямую: закройте сервер файрволом так, чтобы порты 80 и 443 принимали только опубликованные диапазоны IP Cloudflare (или используйте Cloudflare Tunnel, которому не нужны открытые входящие порты), а SSH оставьте только по ключам и с доверенных IP. Under Attack Mode — аварийный рубильник, который проверяет каждого посетителя.
# ufw: allow web traffic only from Cloudflare (ranges from cloudflare.com/ips)
for ip in $(curl -s https://www.cloudflare.com/ips-v4) $(curl -s https://www.cloudflare.com/ips-v6); do
sudo ufw allow proto tcp from "$ip" to any port 80,443
done
sudo ufw status numbered
06Реальный IP посетителя на origin
За прокси каждый запрос приходит на ваш сервер с IP Cloudflare. Логи, rate limiting, fail2ban и антифрод-проверки видят Cloudflare вместо посетителя и даже могут забанить сам Cloudflare. Cloudflare передаёт исходный адрес в заголовке CF-Connecting-IP (и в X-Forwarded-For). Настройте nginx с модулем realip так, чтобы он доверял этому заголовку только для запросов из диапазонов Cloudflare. Тогда $remote_addr везде станет IP посетителя. В приложениях на Laravel или Node за nginx дополнительно настройте trusted proxies, чтобы фреймворк читал правильный IP клиента и схему. Никогда не доверяйте этому заголовку из произвольных источников, иначе любой сможет подделать свой IP.
# /etc/nginx/conf.d/cloudflare-realip.conf (list all current ranges)
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 2400:cb00::/32;
# ... remaining ranges from https://www.cloudflare.com/ips/
real_ip_header CF-Connecting-IP;
07Разбор ошибок 52x и циклов редиректов
Когда Cloudflare показывает страницу ошибки, проблема почти всегда между Cloudflare и вашим origin. 521 Web server is down: origin отклонил соединение — nginx остановлен или файрвол блокирует IP Cloudflare. 522 Connection timed out: Cloudflare не смог установить TCP-соединение — сервер перегружен, в DNS неверный IP или файрвол отбрасывает пакеты. 524: соединение установлено, но приложение отвечало дольше примерно 125 секунд (стандартный таймаут прокси); выносите долгую работу в очереди. 525 SSL handshake failed: origin не говорит на TLS на порту 443 или у него нет сертификата для этого hostname (SNI). 526 Invalid SSL certificate: в режиме Full (strict) сертификат origin просрочен, самоподписан или выпущен на другое имя. Too many redirects: обычно это режим Flexible плюс origin, который редиректит HTTP на HTTPS; переключитесь на Full (strict). Смотрите логи origin и тестируйте его напрямую.
# Test the origin directly, bypassing Cloudflare
curl -svI https://example.com/ --resolve example.com:443:203.0.113.10 2>&1 | grep -E "HTTP/|subject|expire|issuer"
sudo systemctl status nginx
sudo tail -n 50 /var/log/nginx/error.log
Когда применять
- Почти любой публичный сайт или API, которому пригодятся бесплатные DNS, HTTPS, CDN и защита от DDoS.
- Скрыть origin на единственном VPS от прямых атак.
- Сайты с посетителями далеко от сервера, где кэширование на edge снижает задержку.
- Быстро заблокировать вредоносный трафик правилами WAF и rate limiting.
Когда не стоит
- Не-HTTP сервисы (почта, SSH, базы данных) через бесплатный прокси; оставляйте их DNS only или используйте специализированные продукты.
- Когда требования комплаенса или локализации данных запрещают третьей стороне завершать TLS, если только вы не используете соответствующие enterprise-функции.
- Очень большие загрузки или долгие запросы, упирающиеся в лимиты плана (размер загрузки, таймаут прокси около 125 с).
Альтернативы
- AWS CloudFront + Route 53 + WAF
Хорошо подходит внутри AWS, но требует больше настройки и оплачивается по факту использования.
- Fastly
Мощный программируемый edge, рассчитан на крупные команды.
- Bunny.net
Простой и недорогой CDN; инструментов безопасности меньше.
- Без CDN
Нормально для внутренних инструментов; сертификаты и риски DDoS — на вас.
Лучшие практики
- Используйте режим SSL Full (strict) с сертификатом Origin CA или Let's Encrypt на сервере.
- Включите Always Use HTTPS и минимальную версию TLS 1.2; HSTS добавляйте только после проверки всех поддоменов.
- Закройте origin файрволом, оставив только диапазоны IP Cloudflare, или используйте Cloudflare Tunnel.
- Восстанавливайте реальный IP посетителя модулем realip в nginx и trusted proxies в приложении.
- Пишите явные Cache Rules и пропускайте мимо кэша всё персонализированное.
- Ограничивайте частоту запросов к эндпоинтам логина, OTP и сброса пароля.
- Защитите аккаунт Cloudflare через 2FA и используйте API-токены с ограниченными правами вместо глобального ключа.
Частые ошибки
- Использовать режим Flexible, потом добавить на origin редирект с HTTP на HTTPS и получить цикл редиректов.
- Оставить DNS only запись, которая раскрывает IP origin проксируемого веб-сервера.
- Импортировать DNS и пропустить MX- или DKIM-записи, сломав почту после смены nameserver'ов.
- Кэшировать HTML для залогиненных пользователей, из-за чего один пользователь видит страницу другого.
- Забыть настроить реальный IP, из-за чего fail2ban банит IP-адреса Cloudflare.
Глубже
08Что происходит с запросом внутри Cloudflare
Когда посетитель подключается к проксируемому hostname, anycast направляет его в ближайший дата-центр Cloudflare, где TLS завершается на edge-сертификате. Затем запрос проходит ряд фаз в фиксированном порядке. Сначала — сетевая и HTTP-защита от DDoS. Потом правила безопасности: IP access rules, пользовательские правила WAF, правила rate limiting и управляемые наборы правил WAF, плюс проверки ботов. Configuration rules, redirect rules и URL rewrites корректируют запрос. Если к маршруту привязаны Workers, они выполняются следующими и могут ответить сами или изменить запрос. Только после этого кэш ищет cache key. При промахе Origin Rules могут поменять host, порт или SNI, и запрос уходит на ваш origin, возможно сначала через региональный уровень. Знание этого порядка объясняет, например, почему правило WAF блокирует запрос, который всё равно был бы попаданием в кэш.
- Безопасность выполняется до кэша, поэтому заблокированные запросы не тратят ни кэш, ни origin.
- Используйте Trace в дашборде, чтобы увидеть, какие правила сработали для конкретного URL.
- Workers выполняются до кэша; чтобы кэшировать их ответ, используйте Cache API внутри Worker.
09Cache key, tiered cache и cache-заголовки origin
Cache key определяет, что считается одним и тем же объектом. По умолчанию в него входят scheme, host, path и вся query string, поэтому ?utm_source=x создаёт отдельную копию; Cache Rule может игнорировать или сортировать query string либо добавить в ключ заголовок или cookie. По умолчанию Cloudflare уважает Cache-Control от origin для кэшируемого контента: s-maxage и max-age задают время жизни на edge, private и no-store запрещают хранение, а Set-Cookie в ответе обычно мешает его кэшировать. Edge TTL в Cache Rule может переопределить заголовки origin — это мощно и опасно. Tiered Cache заставляет дата-центры нижнего уровня спрашивать верхний уровень вместо вашего origin, что повышает hit ratio и защищает маленький VPS. Варианты purge: один URL, всё целиком, а на некоторых тарифах — по тегу, префиксу или hostname.
# Let the origin control edge vs browser caching
location /blog/ {
add_header Cache-Control "public, max-age=60, s-maxage=600, stale-while-revalidate=300";
}
location /account/ {
add_header Cache-Control "private, no-store";
}
# Check: curl -sI https://example.com/blog/ | grep -iE "cf-cache-status|age|cache-control"
10Закрываем origin: Authenticated Origin Pulls и Tunnel
Файрвол, пропускающий только диапазоны IP Cloudflare, отсекает случайные сканеры, но трафик любого клиента Cloudflare тоже приходит из этих диапазонов. Есть два более надёжных варианта. Authenticated Origin Pulls используют mutual TLS: Cloudflare при подключении к вашему origin предъявляет клиентский сертификат, а nginx отклоняет любое TLS-соединение без него. Pulls на уровне зоны используют сертификат, выпущенный Cloudflare; pulls на уровне hostname позволяют загрузить свой, что строже, ведь его использует только ваша зона. Cloudflare Tunnel идёт ещё дальше: небольшой демон cloudflared работает на вашем сервере и открывает исходящие соединения к Cloudflare, так что серверу вообще не нужны публичные входящие веб-порты. Tunnel подходит и для внутренних инструментов в связке с Cloudflare Access, который ставит логин перед приложением. Цена — ещё один агент, который нужно мониторить и обновлять.
# nginx: accept only connections that present Cloudflare's client cert
ssl_client_certificate /etc/ssl/cloudflare/authenticated_origin_pull_ca.pem;
ssl_verify_client on;
# Or: no open ports, with Cloudflare Tunnel
cloudflared tunnel login
cloudflared tunnel create web-prod
cloudflared tunnel route dns web-prod app.example.com
cloudflared tunnel run web-prod
11Ограничения и пограничные случаи, которые стоит учесть
Несколько ограничений платформы влияют на архитектуру. Размер тела запроса для загрузок через прокси ограничен тарифом (100 MB на Free и Pro), поэтому крупные загрузки должны идти напрямую в объектное хранилище по presigned URL. Таймаут чтения прокси даёт 524, когда origin слишком долго молчит; актуальная документация указывает значение по умолчанию около двух минут, увеличить его можно только на Enterprise, поэтому длинные отчёты и импорты нужно выносить в фоновые задачи с polling или вебхуками. WebSocket поддерживаются, но долгоживущие соединения могут сбрасываться во время обслуживания Cloudflare, так что клиенты должны переподключаться. Проксируются только определённые порты (для HTTPS, например, 443, 2053, 2083, 2087, 2096 и 8443). Бесплатный Universal-сертификат покрывает apex и один уровень поддоменов, поэтому для более глубоких имён вроде a.b.example.com нужен advanced-сертификат. Прежде чем закладываться на дизайн, проверьте актуальные лимиты тарифа.
Реальные ситуации
Логин под атакой credential stuffing
Проблема
Каждую минуту приходят тысячи попыток входа с меняющихся IP. Приложение тормозит, а реальных пользователей блокируют собственные правила блокировки приложения.
Как решить
Добавьте правило rate limiting на путь логина, например POST /login, со счётом по IP и низким порогом в минуту, и отвечайте managed challenge, а не жёсткой блокировкой, чтобы реальные пользователи могли пройти. Добавьте пользовательское правило WAF, которое показывает challenge запросам к логину с низким bot score или из стран, которые вы не обслуживаете. Убедитесь, что origin видит реальные IP через модуль realip, чтобы лимиты на уровне приложения били по атакующим, а не по Cloudflare. В приложении вместо блокировки аккаунта используйте нарастающие задержки и поощряйте двухфакторную аутентификацию. Следите за Security Events, чтобы подстроить пороги.
Экспорт отчёта падает с 524
Проблема
Админы экспортируют большой CSV. Примерно через две минуты Cloudflare показывает страницу 524, хотя по логам origin задача в итоге завершается.
Как решить
Origin не отправил ответ до истечения таймаута чтения прокси. Увеличить его можно только на Enterprise, поэтому поменяйте дизайн: запрос на экспорт ставит задачу в очередь и возвращает 202 Accepted с ID задачи. Воркер собирает файл и загружает его в объектное хранилище. Фронтенд опрашивает эндпоинт статуса или получает уведомление, а затем скачивает файл по подписанному URL. Как временное решение можно перевести hostname админки в режим DNS only, но тогда теряется защита, так что ограничьте доступ по IP или поставьте его за Cloudflare Access.
Пользователи видят дашборды друг друга
Проблема
После того как кто-то добавил правило «Cache Everything», чтобы ускорить сайт, клиент сообщает, что видит имя другого клиента на странице своего аккаунта.
Как решить
Относитесь к этому как к утечке данных. Немедленно удалите или сузьте правило и сделайте purge всего. Затем спроектируйте кэширование явно: Cache Rule, которое кэширует только публичные пути, и bypass, если есть сессионная cookie или путь — /account, /admin, /api или /checkout. На origin отправляйте Cache-Control: private, no-store в персонализированных ответах, чтобы даже широкое правило их не сохраняло, если оно уважает заголовки origin. Проверьте через curl, что на приватных страницах cf-cache-status показывает BYPASS или DYNAMIC. Просмотрите логи, чтобы понять, каких пользователей это затронуло.
Шпаргалка
- Ответ идёт через Cloudflare?
curl -sI https://example.com/ | grep -iE "server|cf-ray"- Было ли попадание в кэш?
curl -sI https://example.com/app.css | grep -i cf-cache-status- Обойти Cloudflare, чтобы проверить origin
curl -svI https://example.com/ --resolve example.com:443:203.0.113.10- Актуальные диапазоны IPv4 Cloudflare
curl -s https://www.cloudflare.com/ips-v4- Какой дата-центр меня обслужил
curl -s https://example.com/cdn-cgi/trace- Purge одного URL через API
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" -H "Authorization: Bearer $CF_API_TOKEN" -H "Content-Type: application/json" --data '{"files":["https://example.com/app.css"]}'- Рекомендуемый режим SSL/TLS
SSL/TLS > Overview > Full (strict)- Заголовок реального IP для nginx
real_ip_header CF-Connecting-IP;- Открыть локальный сервис без открытых портов
cloudflared tunnel run web-prod
В моих реальных проектах
- На части сайтов, которыми я управляю, DNS работает через Cloudflare, а пункт «Cloudflare перед сервером для DNS и базовой защиты от DDoS» входит в мой базовый набор безопасности серверов.
- В этот же набор входят только открытые порты 22, 80 и 443 и HTTPS везде с автоматически продлеваемыми сертификатами — это хорошо сочетается с прокси.
- Мой план консолидации переносит DNS всех доменов на Cloudflare, а трафик переключается через DNS только после проверки нового сервера.
Вопросы и ответы
Q1Чем отличаются Flexible, Full и Full (strict)?
Все три используют HTTPS между посетителем и Cloudflare. Flexible затем общается с origin по обычному HTTP, поэтому на втором участке данные не зашифрованы, а циклы редиректов — частое дело. Full использует HTTPS до origin, но принимает любой сертификат, включая самоподписанные и просроченные, — то есть шифрует, но не аутентифицирует сервер. Full (strict) шифрует и проверяет сертификат по публичному CA или Origin CA от Cloudflare, а также сверяет hostname. Настоящую сквозную защиту даёт только Full (strict). Я ставлю на сервер Origin Certificate или сертификат Let's Encrypt и включаю Full (strict) с первого дня.
Q2Сайт за Cloudflare показывает ошибку 522. Как это отладить?
522 означает, что Cloudflare не смог вовремя открыть TCP-соединение с origin, поэтому я смотрю на путь до сервера, а не на приложение. Сначала убеждаюсь, что DNS-запись указывает на правильный IP origin. Затем проверяю, что сервер работает и не перегружен, что nginx слушает 80 и 443 и что файрвол — и ufw, и файрвол провайдера — пропускает диапазоны IP Cloudflare. Тестирую origin напрямую через curl --resolve. Также проверяю fail2ban и rate limit'ы, которые могли заблокировать IP Cloudflare из-за того, что реальный IP не восстанавливается. Логи origin подтверждают, доходят ли запросы вообще.
Q3Почему после включения Cloudflare я получаю «too many redirects»?
Почти всегда это режим Flexible SSL в сочетании с HTTPS-редиректом на origin. Посетитель запрашивает HTTPS, Cloudflare пересылает запрос как обычный HTTP, origin редиректит на HTTPS, Cloudflare снова пересылает как HTTP — и цикл не заканчивается. Решение — установить сертификат на origin и переключить режим на Full (strict). Другие причины — конфликтующие правила редиректов между Cloudflare и приложением или приложение, которое не доверяет X-Forwarded-Proto и считает каждый запрос HTTP. В этом случае настройте trusted proxies, чтобы фреймворк видел исходную схему.
Q4Как увидеть реальный IP посетителя за Cloudflare?
Cloudflare добавляет заголовок CF-Connecting-IP с исходным адресом клиента. В nginx я использую модуль realip: set_real_ip_from для каждого диапазона IP Cloudflare и real_ip_header CF-Connecting-IP, чтобы $remote_addr в логах и лимитах был посетителем. Важно доверять заголовку только из диапазонов Cloudflare, иначе любой сможет подделать свой IP, отправив заголовок сам. В приложении я настраиваю trusted proxies, чтобы оно читало правильный IP клиента и схему. Без этого rate limiting и fail2ban видят только Cloudflare и могут заблокировать легитимный трафик или сам Cloudflare.
Q5Что стоит кэшировать на edge, а что нет?
Статические версионированные ресурсы — JavaScript, CSS, шрифты и изображения — можно кэшировать надолго, в идеале с хэшем в имени файла, чтобы деплой менял URL. Публичный HTML, одинаковый для всех посетителей, — маркетинговые страницы или посты в блоге, — можно кэшировать ненадолго с очисткой при публикации. Всё персонализированное должно идти мимо кэша: страницы для залогиненных пользователей, корзины, оформление заказа, личный кабинет, админка и большинство ответов API. Я пишу Cache Rules, которые пропускают кэш при наличии сессионной cookie, и проверяю поведение по cf-cache-status. Один раз закэшированная приватная страница может слить данные одного пользователя следующему посетителю.
Q6Защищает ли Cloudflare мой сервер, если IP origin известен?
Лишь частично. Cloudflare защищает трафик, который проходит через его прокси. Если атакующие знают IP origin, они могут слать запросы прямо на сервер в обход WAF, rate limit'ов и защиты от DDoS. IP утекает через историю DNS, DNS only записи, заголовки писем с того же сервера или через certificate transparency в сочетании со сканированием. Поэтому я закрываю origin: файрвол принимает порты 80 и 443 только из диапазонов Cloudflare, либо я использую Cloudflare Tunnel без открытых веб-портов. Если IP уже был раскрыт, после закрытия стоит подумать о переезде на новый IP.
Вопросы уровня senior
S1Как безопасно поставить нагруженный сайт на Laravel или Next.js за Cloudflare?
Начинаю с корректности: Full (strict) с origin-сертификатом, восстановление реального IP в nginx и trusted proxies во фреймворке, чтобы работали сессии, rate limit и определение HTTPS. Закрываю origin правилами файрвола плюс Authenticated Origin Pulls или использую Tunnel. Затем кэширование по замыслу: статика с хэшем в имени кэшируется на год, публичные страницы — ненадолго со stale-while-revalidate и purge при деплое или публикации, и явный bypass для любого запроса с сессионной cookie. Безопасность: managed WAF, rate limit на эндпоинтах аутентификации и пользовательские правила для путей админки. Цена в том, что правила кэша становятся частью поведения приложения, поэтому они живут в системе контроля версий через Terraform или API, а не только в дашборде.
S2Какие риски несёт зависимость от одного CDN-провайдера и как их снизить?
Сбой у провайдера, проблема с аккаунтом или неудачный глобальный выкат конфигурации могут разом положить все сайты за ним, а функции вроде Workers, правил и Tunnel создают vendor lock-in. Для большинства небольших и средних проектов выгода перевешивает, но я уменьшаю радиус поражения: держу задокументированный способ переключить записи в DNS only и отдавать сайт напрямую с защищённого origin, поддерживаю TLS на origin валидным независимо от CDN и регулярно экспортирую зону и правила. Infrastructure as code делает конфигурацию воспроизводимой. Крупные компании идут дальше — multi-CDN за DNS steering или вторичный DNS-провайдер, но это удваивает конфигурацию, мониторинг и стоимость, поэтому нужно чёткое требование к доступности.
S3Когда Cache Everything для HTML — хорошая идея?
Когда страницы одинаковы для всех посетителей и меняются по известному событию: блоги, документация, маркетинговые страницы и страницы каталога без персональных цен. Тогда кэширование HTML на edge снимает большую часть нагрузки с origin и даёт низкий TTFB по всему миру. Нужны три предохранителя: правило bypass для сессионных cookie, админки, API, корзины и checkout; короткий edge TTL или purge по событию, чтобы обновления появлялись быстро; и заголовки origin, помечающие приватные ответы как private, no-store, — вторая линия защиты. Персонализированные фрагменты можно подгружать небольшими API-запросами. Это плохая идея, когда контент зависит от cookie, географии, A/B-тестов или авторизации, если только cache key явно не включает эти измерения.
Глоссарий
- Proxied record
- DNS-запись с оранжевым облаком: посетители подключаются к Cloudflare, а он пересылает трафик на ваш origin.
- Edge certificate
- Сертификат, который Cloudflare показывает посетителям; он отдельный от origin-сертификата на вашем сервере.
- Origin CA certificate
- Бесплатный сертификат от Cloudflare, которому доверяет только Cloudflare; используется для соединения edge — origin.
- Cache key
- Набор частей запроса (host, path, query, иногда заголовки), который идентифицирует один закэшированный объект.
- Tiered Cache
- Edge-точки спрашивают региональный верхний уровень раньше origin, снижая нагрузку на origin и повышая hit ratio.
- WAF
- Web Application Firewall: правила, которые проверяют HTTP-запросы и блокируют вредоносные шаблоны или показывают challenge.
- Managed challenge
- Cloudflare сам решает, показать посетителю невидимую проверку или интерактивный challenge.
- Authenticated Origin Pulls
- Mutual TLS, при котором Cloudflare предъявляет клиентский сертификат, и origin принимает только соединения от Cloudflare.
- Cloudflare Tunnel
- Только исходящее соединение от агента cloudflared на вашем сервере, поэтому входящие веб-порты не нужны.
- cf-ray
- Уникальный ID каждого запроса через Cloudflare; полезен при чтении логов и обращении в поддержку.
Что изучить дальше
Есть идея продукта?Давайте создадим его.
Расскажите о своей идее, продукте или команде. Обычно отвечаю в течение одного рабочего дня.