Редирект с HTTP на HTTPS: настройка в Apache и Nginx без зацикливания

  • Обновлено
  • Чтение ≈ 4 минуты

Краткий ответ

Настройка перехода с HTTP на HTTPS включает редирект 301 в nginx или .htaccess, устранение смешанного содержимого, обновление ссылок и аккуратное включение HSTS. Проверьте сертификат, цепочку редиректов и консоль браузера на mixed content.

В этой статье
  1. Что нужно настроить
  2. Основные проблемы
  3. Порядок
  4. Проверка и поиск смешанного содержимого
Mixed content
Mixed Content: The page was loaded over HTTPS, but requested an insecure resource
По-русскиСтраница по HTTPS загружает ресурсы по HTTP, браузер блокирует их.

#Что нужно настроить

Полный переход на HTTPS включает четыре шага: рабочий сертификат, редирект 301 с HTTP на HTTPS, устранение смешанного содержимого (картинки, скрипты, стили по http://) и, после проверки, заголовок HSTS. Каждый шаг можно сделать неправильно: редирект с лишними шагами, ссылки в базе данных остаются на http://, HSTS включён слишком рано. Эта статья описывает именно настройку редиректа и устранение mixed content; цикл редиректов разобран в отдельной статье.

#Основные проблемы

Возможная причинаКак узнатьЧто делать
Смешанное содержимоеКартинки по http.Значок «не защищено», блокировка.Замените ссылки на https.
Редирект 302Временный.Поиск не склеивает версии.301.
Цепочка редиректовhttp→www→https.Несколько переходов.Один редирект на конечный адрес.
HSTS включён слишком раноБольшой срок.Нельзя вернуться на HTTP.Начните с max-age=300.
Сертификат не покрывает wwwТолько основной домен.Предупреждение на www.Выпустите на оба имени.
Внешние ресурсы по httpСтарые виджеты.Блокируются.Найдите https-версию.

#Порядок

  1. Установите сертификат и проверьте, что сайт открывается по HTTPSОткройте https://ваш-домен в браузере и проверьте сертификат (срок, имя, отсутствие предупреждений). Администратор должен заранее выпустить сертификат на все используемые домены и поддомены через панель хостинга или поддерживаемый ACME-клиент. Не включайте принудительное перенаправление, если целевой адрес пока не открывается; иначе пользователи потеряют доступ.
  2. Настройте редирект 301 на уровне веб-сервераОпределите, где заканчивается HTTPS: на Nginx, Apache, балансировщике или CDN. Сохраните текущие правила, затем добавьте ОДНО перенаправление HTTP→HTTPS на уровне, который принимает HTTP-запрос, по примеру именно вашего сервера. Если CDN уже принудительно перенаправляет, не дублируйте правило в приложении без проверки схемы прокси. Применяйте после nginx -t либо apachectl configtest и контрольного запроса.
  3. Обновите ссылки в базе данных и шаблонах на HTTPS или относительныеНайдите абсолютные http://-ссылки в шаблонах и настройках CMS. Для WordPress до замены базы выполните wp db export ..., затем wp search-replace ... --dry-run из корня установки и оцените число совпадений; лишь после копии применяйте корректную замену, сохраняющую сериализованные данные. Нельзя менять содержимое бинарных файлов обычным поиском/заменой или подставлять example.ru буквально.
  4. Найдите смешанное содержимое в консоли браузераОткройте сайт по HTTPS, нажмите F12 → вкладка «Консоль» или «Безопасность» и обновите страницу. Ищите сообщения Mixed Content с конкретными URL ресурсов, открываемых по HTTP. Исправьте адрес ресурса в настройке шаблона, записи или внешнем скрипте; если внешний ресурс не поддерживает HTTPS, замените его. После исправления проверьте, что изображение, стиль и сценарий загружаются без предупреждений.
  5. Обновите canonical, карту сайта, robots.txt, счётчикиОткройте несколько страниц и проверьте в исходном HTML canonical, а также значения URL в sitemap.xml и настройках счётчиков. Они должны использовать основной HTTPS-адрес; не блокируйте HTTP в robots.txt до проверки перенаправления. Затем обновите карту сайта штатным генератором CMS и проверьте её открытие по HTTPS.
  6. Добавьте новый ресурс HTTPS в Яндекс.Вебмастер и Search ConsoleВойдите в Яндекс Вебмастер и Google Search Console, подтвердите права на HTTPS-адрес и загрузите актуальную карту сайта по инструкции соответствующего сервиса. Сохраните старую статистику, чтобы сравнить индексацию после перехода. Это вспомогательный шаг: пользователи должны перенаправляться сервером независимо от работы поисковых инструментов.
  7. После недели стабильной работы включите HSTS с небольшим сроком, затемЗаголовок HSTS включайте только после проверки всего сайта и используемых поддоменов: он заставляет браузер обращаться по HTTPS и усложняет откат. Сначала включите минимальный max-age на ограниченный период, проверьте сертификат и доступность, затем постепенно увеличивайте срок. Не применяйте includeSubDomains или preload, если хотя бы один нужный поддомен не готов к обязательному HTTPS.
  8. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Редирект на HTTPS и HSTS в nginx
    NginxКоманда
    Редирект на HTTPS и HSTS в nginx
    server {
    listen 80;
    server_name example.ru www.example.ru;
    return 301 https://example.ru$request_uri;
    }
    server {
    listen 443 ssl http2;
    server_name example.ru;
    ssl_certificate /etc/letsencrypt/live/example.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.ru/privkey.pem;
    add_header Strict-Transport-Security "max-age=300" always;
    }
    Вариант 2Редирект на HTTPS в Apache
    ТекстКоманда
    Редирект на HTTPS в Apache
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    Вариант 3Найти ссылки http:// в файлах шаблонов и в базе WordPress (WP-CLI, пробный запуск)
    Linux · Терминал (Bash)Команда
    Найти ссылки http:// в файлах шаблонов и в базе WordPress (WP-CLI, пробный запуск)
    grep -rn "http://example.ru" wp-content/themes/ | head -20
    wp search-replace 'http://example.ru' 'https://example.ru' --dry-run
    Вариант 4Выполнить замену ссылок в базе (после резервной копии)
    Linux · Терминал (Bash)С осторожностью
    Выполнить замену ссылок в базе (после резервной копии)
    wp db export backup-before-https.sql
    wp search-replace 'http://example.ru' 'https://example.ru' --skip-columns=guid

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

    Вариант 5Проверка редиректа и заголовка HSTS
    Linux · Терминал (Bash)Команда
    Проверка редиректа и заголовка HSTS
    curl -sI http://example.ru/ | grep -iE "^HTTP|^location"
    curl -sI https://example.ru/ | grep -i strict-transport

#Проверка и поиск смешанного содержимого

Откройте сайт в Chrome, нажмите F12 → Console: сообщения «Mixed Content» перечисляют каждый небезопасный ресурс. Для массовой проверки используйте https://www.whynopadlock.com/ . Добавьте заголовок Content-Security-Policy: upgrade-insecure-requests, чтобы браузер автоматически повышал запросы до HTTPS, но не рассматривайте его как замену исправления ссылок.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.