wpssl.ru wordpress WPSSL.ru

Настройка SSL в WordPress при использовании CDN и Varnish

В современных проектах на WordPress часто применяются CDN (Content Delivery Network) и Varnish Cache для ускорения загрузки страниц и снижения нагрузки на сервер. Однако совместное использование SSL, CDN и Varnish может привести к различным проблемам, таким как смешанный контент, некорректные редиректы и ошибки безопасности HTTPS. В этой статье подробно разберем, как правильно настроить SSL в WordPress с учетом этих технологий.

Особенности работы SSL с CDN и Varnish

CDN и Varnish работают как промежуточные прокси-серверы между пользователем и вашим хостингом. Они могут кэшировать контент и оптимизировать доставку, но при этом влияют на передачу HTTPS-запросов.

Основные сложности возникают из-за того, что SSL-сертификат обычно установлен на сервере, но запросы к серверу проходят через CDN и Varnish, где может происходить расшифровка и повторное шифрование трафика (SSL Termination). В результате WordPress может «не видеть» корректный протокол HTTPS и генерировать ссылки с http://, что вызывает ошибки смешанного контента.

Для корректной работы нужно обеспечить, чтобы WordPress понимал, что соединение с пользователем защищено HTTPS, даже если между CDN/Varnish и сервером используется HTTP.

Настройка WordPress для корректного HTTPS при использовании CDN и Varnish

1. Установка SSL-сертификата на CDN и сервер

Первый шаг — наличие действующего SSL-сертификата как на вашем сервере, так и на CDN. Многие популярные CDN, например Cloudflare, предоставляют бесплатные сертификаты и настроены на поддержку HTTPS из коробки.

Для Varnish SSL-сертификат обычно устанавливается на фронтенд-сервере (например, Nginx), так как Varnish сам не поддерживает SSL. То есть SSL расшифровывается на Nginx, а Varnish работает с обычным HTTP-трафиком.

2. Правильная передача заголовков от CDN и Varnish к WordPress

WordPress определяет протокол HTTPS по серверной переменной $_SERVER['HTTPS'] и заголовкам прокси-сервера. Чтобы WordPress понимал, что соединение защищено, необходимо правильно настроить передачу заголовка X-Forwarded-Proto:

RequestHeader set X-Forwarded-Proto "https"

В конфигурации Nginx или Apache, которая работает перед Varnish, надо убедиться, что этот заголовок передается правильно.

3. Принудительное определение HTTPS в WordPress (wpssl_define_https)

Чтобы гарантировать правильное определение HTTPS внутри WordPress, добавьте следующий код в wp-config.php:

function wpssl_is_ssl() {
    if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
        return true;
    }
    if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] === '1')) {
        return true;
    }
    return false;
}

if (wpssl_is_ssl()) {
    $_SERVER['HTTPS'] = 'on';
}

Этот код проверяет заголовок X-Forwarded-Proto, который выставляют CDN и Varnish, и при необходимости устанавливает переменную $_SERVER['HTTPS'], чтобы WordPress корректно определял протокол.

Решение проблем смешанного контента при работе с CDN и SSL

Даже при правильной настройке SSL и CDN, на сайте могут появляться ошибки смешанного контента, связанные с тем, что некоторые ресурсы (изображения, скрипты, стили) загружаются по http. Для решения используйте несколько подходов.

1. Плагин для поиска и замены URL

Отлично подойдет плагин Real URL Fixer или Velvet Blues Update URLs. Они помогут быстро заменить все http:// на https:// в базе данных.

2. Использование фильтра для автоматической замены URL

Можно добавить фильтр, который будет автоматически менять http на https при выводе контента:

add_filter('the_content', 'wpssl_fix_mixed_content');
function wpssl_fix_mixed_content($content) {
    $content = str_replace('http://', 'https://', $content);
    return $content;
}

Этот способ прост, но менее эффективен, чем замена в базе.

3. Настройка CDN на автоматическое переписывание URL

Многие CDN, например Cloudflare, предоставляют функцию автоматического переписывания URL на HTTPS. Включите её в панели управления CDN, чтобы избежать ошибок смешанного контента.

Пример настройки Varnish и Nginx с SSL для WordPress

Ниже пример минимальной конфигурации Nginx для работы с SSL и Varnish:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://127.0.0.1:6081; # Varnish слушает на 6081
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Port 443;
    }
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

В конфигурации Nginx важно передать заголовок X-Forwarded-Proto https, чтобы WordPress мог корректно определить протокол.

Использование плагинов для упрощения настройки SSL с CDN и Varnish

Для автоматизации и удобства можно использовать плагины:

  • Clearfy Pro — содержит опции для исправления смешанного контента и корректного определения HTTPS при работе через прокси.
  • WPRemark — поможет отслеживать ошибки SSL и смешанного контента в комментариях и на страницах.

Ссылки на плагины и подробные инструкции доступны на wpshop.ru.

Как проверить корректность настроек SSL с CDN и Varnish

После настройки SSL и CDN обязательно проверьте:

  • Корректность загрузки сайта по HTTPS без ошибок смешанного контента. В браузере вкладка консоли (F12) должна быть чистой.
  • Правильность редиректов с http на https.
  • Передаются ли заголовки X-Forwarded-Proto и HTTPS на сервере.
  • Работу кэширования Varnish — не кэшируются ли редиректы и HTTPS-заголовки неправильно.

Для проверки можно использовать инструменты как SSL Labs и официальную документацию Varnish.

×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙