Использование CDN, такого как Cloudflare, для ускорения загрузки сайта и повышения уровня безопасности — популярная практика среди владельцев WordPress-сайтов. Однако настройка SSL при работе с Cloudflare часто вызывает трудности, особенно из-за особенностей работы прокси-сервера и смешанного контента. В этой статье подробно рассмотрим, как правильно настроить SSL в WordPress при использовании Cloudflare, чтобы избежать распространённых ошибок и обеспечить надежное HTTPS-соединение.
Почему возникают проблемы с SSL при использовании Cloudflare и WordPress
Cloudflare работает как обратный прокси, который принимает запросы пользователей и пересылает их на ваш сервер. При этом SSL-сертификат может быть установлен как на стороне Cloudflare, так и на вашем сервере. В зависимости от выбранного режима шифрования (Flexible, Full или Full (Strict)) возникают разные нюансы:
- Flexible SSL шифрует трафик между пользователем и Cloudflare, но не между Cloudflare и вашим сервером. Это часто приводит к ошибкам смешанного контента и некорректной работе HTTPS внутри WordPress.
- Full SSL шифрует трафик полностью, но не проверяет сертификат сервера, что может допускать использование самоподписанных сертификатов.
- Full SSL (Strict) требует валидного SSL-сертификата на сервере, что обеспечивает максимальную безопасность.
Неверная настройка приводит к ошибкам, таким как "ERR_TOO_MANY_REDIRECTS", смешанному контенту или невозможности корректной работы REST API и AJAX-запросов с HTTPS.
Шаг 1. Правильный выбор режима SSL в Cloudflare
Рекомендуется использовать режим Full (Strict), если на вашем сервере установлен корректный SSL-сертификат. Для этого можно использовать бесплатные сертификаты Let's Encrypt. Такой режим обеспечивает надежное сквозное шифрование.
Если сертификат отсутствует, установите его или временно используйте Full, но избегайте Flexible, так как он приводит к частым проблемам с сайтом на WordPress.
Шаг 2. Настройка WordPress для корректной работы с SSL за Cloudflare
WordPress должен корректно определять, что соединение идет через HTTPS, даже если сервер видит запросы как HTTP (из-за проксирования Cloudflare). Для этого в файле wp-config.php добавьте следующий код:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
$_SERVER['HTTPS'] = 'on';
}
Этот код сообщает WordPress, что соединение защищено, когда Cloudflare пересылает заголовок X-Forwarded-Proto: https. Это важно для генерации правильных URL и предотвращения ошибок смешанного контента.
Шаг 3. Решение проблем смешанного контента
Даже при правильной настройке SSL часто возникают ошибки смешанного контента: когда часть ресурсов загружается по HTTP, а не HTTPS. Для их устранения:
- Проверьте настройки в базе данных WordPress. В разделе
wp_optionsубедитесь, что значенияsiteurlиhomeначинаются сhttps://. - Используйте плагин Clearfy Pro для автоматической замены HTTP на HTTPS в контенте и исправления ссылок.
- Добавьте в файл
.htaccessследующие правила для принудительного HTTPS (если не настроено на уровне сервера):
# Перенаправление на HTTPS
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Обратите внимание, что стандартные правила перенаправления могут вызывать циклы при проксировании, поэтому используем проверку заголовка X-Forwarded-Proto.
Шаг 4. Настройка заголовков безопасности и HSTS
Cloudflare позволяет настраивать заголовки безопасности, но часть из них можно и нужно задавать на стороне WordPress или сервера. Например, добавьте в functions.php вашей темы следующий код для отправки заголовка HSTS:
function wpssl_add_hsts_header() {
header('Strict-Transport-Security: max-age=31536000; includeSubDomains; preload');
}
add_action('send_headers', 'wpssl_add_hsts_header');
HSTS заставляет браузеры всегда использовать HTTPS для вашего домена, что повышает безопасность. Однако перед активацией убедитесь, что HTTPS работает корректно на всем сайте.
Шаг 5. Настройка SSL для AJAX и REST API в WordPress с Cloudflare
AJAX-запросы и REST API требуют корректной работы SSL, так как браузеры блокируют смешанный контент и незащищённые вызовы. Для решения проблем:
- Убедитесь, что в JavaScript используется правильный протокол в URL, например, используйте относительные ссылки или
wp_localize_scriptдля передачи URL с HTTPS. - В PHP, при создании REST API или AJAX-обработчиков, учитывайте код из Шага 2 для правильного определения HTTPS.
- Если возникают ошибки CORS, настройте заголовки на сервере и в Cloudflare, разрешив необходимые домены.
Пример: Включение HTTPS для AJAX-запросов в теме WordPress
function wpssl_enqueue_scripts() {
wp_enqueue_script('my-ajax-script', get_template_directory_uri() . '/js/ajax.js', array('jquery'), null, true);
wp_localize_script('my-ajax-script', 'wpssl_ajax_object', array(
'ajax_url' => admin_url('admin-ajax.php', 'https'),
'nonce' => wp_create_nonce('wpssl_nonce')
));
}
add_action('wp_enqueue_scripts', 'wpssl_enqueue_scripts');
В JavaScript используйте wpssl_ajax_object.ajax_url для всех AJAX вызовов, чтобы гарантировать HTTPS.
Шаг 6. Полезные плагины для работы с SSL и Cloudflare в WordPress
- Clearfy Pro — автоматическая оптимизация и исправление смешанного контента, настройка HTTPS.
- Cloudflare — официальный плагин для интеграции с Cloudflare, позволяет очистить кеш и настроить некоторые параметры.
- Really Simple SSL — упрощает переход на HTTPS, автоматизирует большинство настроек.
Использование этих плагинов поможет минимизировать ручную работу и избежать типичных ошибок.
Выводы и рекомендации
Настройка SSL при использовании Cloudflare и WordPress требует внимания к деталям — правильный режим шифрования, корректная работа с заголовками, устранение смешанного контента и настройка AJAX/REST API. Следуя описанным шагам, вы сможете обеспечить стабильную и безопасную работу сайта с HTTPS и CDN.
Подробнее о плагине Clearfy Pro и других инструментах вы можете узнать на wpshop.ru.