Назад к статьям

Cloudflare Full (Strict): почему режим SSL важнее, чем кажется

Разбираемся, почему для сайта за Cloudflare лучше держать настоящий сертификат на origin и включать Full (Strict), а не Flexible.

Когда сайт стоит за Cloudflare, легко попасть в ловушку: в браузере замочек есть, HTTPS вроде работает, значит все хорошо. Но между посетителем и Cloudflare — это только половина маршрута. Вторая половина начинается там, где Cloudflare идет на origin-сервер: VPS, nginx, Apache, Caddy или другой backend.

И вот там часто начинается путаница с режимами SSL/TLS.

Flexible выглядит удобно, но это компромисс

Flexible шифрует соединение между браузером и Cloudflare, но до origin Cloudflare ходит по обычному HTTP. Для простого лендинга это иногда кажется нормальным: быстро включил, ничего не настраивал на сервере, сайт открылся.

Проблема в том, что origin остается без настоящего HTTPS. Плюс появляются неприятные побочные эффекты: циклические редиректы, странные mixed-mode сценарии, проблемы с приложениями, которые сами смотрят на схему запроса и ожидают HTTPS.

Для продакшена такой режим лучше не считать финальным.

Full и Full (Strict) — не одно и то же

Full уже шифрует участок Cloudflare -> origin. Но в обычном Full Cloudflare не так строго проверяет сертификат на сервере. Это лучше, чем Flexible, но все еще оставляет место для неправильной конфигурации.

Full (Strict) делает то, чего обычно и хочется от HTTPS: Cloudflare проверяет, что сертификат на origin:

Если что-то не так, Cloudflare не делает вид, что все нормально, а показывает ошибку. Да, это строже. Но именно поэтому режим и полезен.

Мини-чеклист для VPS

На обычном nginx-сайте я бы проверял так:

curl -I https://example.com/
curl -I --resolve example.com:443:ORIGIN_IP https://example.com/

Первая команда проверяет публичный путь через Cloudflare. Вторая заставляет curl идти прямо на origin, но с правильным hostname. Если напрямую origin возвращает 200 и сертификат валиден, Full (Strict) обычно включается без сюрпризов.

Еще полезно проверить HTTP:

curl -I http://example.com/

Нормальная картина — редирект на HTTPS. Ненормальная — бесконечные 301/302 или ситуация, когда приложение считает, что запрос пришел по HTTP, хотя пользователь уже на HTTPS.

Что я обычно делаю для маленьких сайтов

Мой вариант по умолчанию такой:

  1. На origin выпускается Let's Encrypt сертификат через certbot.
  2. nginx слушает 80 и 443.
  3. HTTP редиректит на HTTPS.
  4. В Cloudflare включается Full (Strict).
  5. После этого уже можно думать о кэше, WAF и правилах.

Это не самая сложная схема, зато она хорошо диагностируется. Если сайт не открывается, понятно, где смотреть: DNS, Cloudflare, origin-сертификат или nginx.

Почему это важно даже для блога

Блог кажется маленьким проектом, но его тоже будут обходить поисковые роботы, рекламные системы, браузеры с разными политиками безопасности и пользователи из разных сетей. Если HTTPS настроен криво, часть проблем будет выглядеть как “Google не видит сайт”, “AdSense не проходит проверку” или “у меня не открывается, а у тебя открывается”.

Поэтому Full (Strict) — это не про паранойю. Это просто нормальная базовая настройка, после которой меньше случайных проблем.

Источники