Mixed Content: The page was loaded over HTTPS, but requested an insecure resource
#Что нужно настроить
Полный переход на 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-версию. |
#Порядок
- Установите сертификат и проверьте, что сайт открывается по HTTPSОткройте
https://ваш-доменв браузере и проверьте сертификат (срок, имя, отсутствие предупреждений). Администратор должен заранее выпустить сертификат на все используемые домены и поддомены через панель хостинга или поддерживаемый ACME-клиент. Не включайте принудительное перенаправление, если целевой адрес пока не открывается; иначе пользователи потеряют доступ. - Настройте редирект 301 на уровне веб-сервераОпределите, где заканчивается HTTPS: на Nginx, Apache, балансировщике или CDN. Сохраните текущие правила, затем добавьте ОДНО перенаправление HTTP→HTTPS на уровне, который принимает HTTP-запрос, по примеру именно вашего сервера. Если CDN уже принудительно перенаправляет, не дублируйте правило в приложении без проверки схемы прокси. Применяйте после
nginx -tлибоapachectl configtestи контрольного запроса. - Обновите ссылки в базе данных и шаблонах на HTTPS или относительныеНайдите абсолютные
http://-ссылки в шаблонах и настройках CMS. Для WordPress до замены базы выполнитеwp db export ..., затемwp search-replace ... --dry-runиз корня установки и оцените число совпадений; лишь после копии применяйте корректную замену, сохраняющую сериализованные данные. Нельзя менять содержимое бинарных файлов обычным поиском/заменой или подставлятьexample.ruбуквально. - Найдите смешанное содержимое в консоли браузераОткройте сайт по HTTPS, нажмите F12 → вкладка «Консоль» или «Безопасность» и обновите страницу. Ищите сообщения
Mixed Contentс конкретными URL ресурсов, открываемых по HTTP. Исправьте адрес ресурса в настройке шаблона, записи или внешнем скрипте; если внешний ресурс не поддерживает HTTPS, замените его. После исправления проверьте, что изображение, стиль и сценарий загружаются без предупреждений. - Обновите canonical, карту сайта, robots.txt, счётчикиОткройте несколько страниц и проверьте в исходном HTML
canonical, а также значения URL в sitemap.xml и настройках счётчиков. Они должны использовать основной HTTPS-адрес; не блокируйте HTTP в robots.txt до проверки перенаправления. Затем обновите карту сайта штатным генератором CMS и проверьте её открытие по HTTPS. - Добавьте новый ресурс HTTPS в Яндекс.Вебмастер и Search ConsoleВойдите в Яндекс Вебмастер и Google Search Console, подтвердите права на HTTPS-адрес и загрузите актуальную карту сайта по инструкции соответствующего сервиса. Сохраните старую статистику, чтобы сравнить индексацию после перехода. Это вспомогательный шаг: пользователи должны перенаправляться сервером независимо от работы поисковых инструментов.
- После недели стабильной работы включите HSTS с небольшим сроком, затемЗаголовок HSTS включайте только после проверки всего сайта и используемых поддоменов: он заставляет браузер обращаться по HTTPS и усложняет откат. Сначала включите минимальный
max-ageна ограниченный период, проверьте сертификат и доступность, затем постепенно увеличивайте срок. Не применяйтеincludeSubDomainsили preload, если хотя бы один нужный поддомен не готов к обязательному HTTPS. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Проверка и поиск смешанного содержимого
Откройте сайт в Chrome, нажмите F12 → Console: сообщения «Mixed Content» перечисляют каждый небезопасный ресурс. Для массовой проверки используйте https://www.whynopadlock.com/ . Добавьте заголовок Content-Security-Policy: upgrade-insecure-requests, чтобы браузер автоматически повышал запросы до HTTPS, но не рассматривайте его как замену исправления ссылок.