Диагностика проблем с SSL при использовании CDN и Varnish
Использование CDN совместно с Varnish для ускорения WordPress-сайта часто приводит к частым ошибкам SSL, таким как «смешанный контент», «ERR_TOO_MANY_REDIRECTS», или отсутствие HTTPS на фронтенде. Основная причина — некорректная обработка HTTPS-запросов на уровне прокси и кеша, из-за чего WordPress не понимает, что запрос изначально был защищенным.
Как понять, что проблема именно в Varnish и CDN
- Проверка заголовков ответа от сайта через curl:
Если видим редиректы с HTTPS на HTTP или отсутствует заголовокcurl -I https://example.comX-Forwarded-Proto: https, вероятно, проблема в прокси. - Ошибки смешанного контента в консоли браузера — ресурсы грузятся по HTTP вместо HTTPS.
- В логах Varnish или CDN можно найти записи о неправильной обработке протокола.
Пошаговое решение: настройка SSL при использовании CDN и Varnish
1. Настройка Varnish для корректной передачи HTTPS
Varnish не работает с HTTPS напрямую, поэтому обычно SSL терминируется на nginx или другом обратном прокси, а Varnish принимает HTTP-запросы. Чтобы WordPress видел, что исходный запрос был HTTPS, нужно правильно настроить заголовки.
Добавьте в конфигурацию nginx (или другого прокси), который принимает SSL:
proxy_set_header X-Forwarded-Proto $scheme;Или для Apache:
RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}В конфиге Varnish (vcl_recv) добавьте:
if (req.http.X-Forwarded-Proto) {
set req.http.X-Forwarded-Proto = req.http.X-Forwarded-Proto;
} else {
set req.http.X-Forwarded-Proto = "http";
}2. Настройка WordPress для правильного определения HTTPS
В wp-config.php добавьте следующий код, чтобы WordPress учитывал заголовок и корректно формировал ссылки:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}3. Настройка CDN
В большинстве CDN (Cloudflare, KeyCDN, BunnyCDN и др.) нужно включить режим «Full SSL» или «Full SSL (strict)», чтобы CDN корректно проксировал HTTPS-запросы.
Также убедитесь, что CDN не переопределяет или не удаляет заголовок X-Forwarded-Proto.
Проверка результата после внедрения
- Перезапустите сервисы nginx, Varnish и очистите кеш CDN.
- Проверьте через curl или браузер, что сайт отвечает по HTTPS без редиректов или ошибок:
curl -I https://example.com
HTTP/2 200
... (нет редиректов с HTTPS на HTTP)- В консоли браузера не должно быть ошибок смешанного контента.
- Проверьте, что WordPress правильно генерирует HTTPS-ссылки в меню, медиа и API.
Частые ошибки и пути их исправления
- Ошибка: «ERR_TOO_MANY_REDIRECTS» — обычно из-за бесконечного цикла редиректов между HTTP и HTTPS.
Решение: проверьте, что вwp-config.phpправильно выставлен$_SERVER['HTTPS'] = 'on'при проксировании, и что Varnish не меняет протокол. - Ошибка: смешанный контент при загрузке ресурсов.
Решение: проверьте, что все внутренние ссылки в базе данных и настройках WordPress используютhttps://, можно использовать плагин Clearfy для поиска и исправления дублей и URL. - Ошибка: CDN удаляет или не передает заголовок
X-Forwarded-Proto.
Решение: проверьте настройки CDN, включите передачу всех необходимых заголовков прокси.
Практические советы по безопасности и производительности
- Используйте
HSTSзаголовки на уровне nginx для принудительного HTTPS. - Включите HTTP/2 или HTTP/3 на прокси-сервере для ускорения HTTPS-запросов.
- Настройте кэширование в Varnish и CDN так, чтобы не кэшировались страницы с пользовательским содержимым (например, корзина WooCommerce).
- Регулярно проверяйте логи Varnish и прокси на предмет ошибок SSL и редиректов.
- Используйте плагин Clearfy Pro для оптимизации URL и удаления дублей, чтобы избежать ошибок смешанного контента.
Сравнение вариантов передачи HTTPS инфо в WordPress при использовании Varnish и CDN
| Метод | Настройка | Плюсы | Минусы |
|---|---|---|---|
$_SERVER['HTTPS'] через HTTP_X_FORWARDED_PROTO | Код в wp-config.php | Простая реализация, не требует плагинов | Зависит от корректной передачи заголовков прокси |
| Плагины (например, Really Simple SSL) | Автоматическая настройка и редиректы | Удобно для начинающих | Может конфликтовать с Varnish, нагрузка на сервер |
| Настройка SSL на уровне обратного прокси | Конфиг nginx/apache + Varnish | Высокая производительность и безопасность | Сложнее в настройке |