Сайты

Устранение предупреждений о смешанном контенте после включения HTTPS

When SSL is active but the browser padlock is missing, broken or showing a warning, the cause is almost always mixed content: the page itself is encrypted but something on it is still being fetched…

Когда SSL активен, но замок браузера отсутствует, повреждён или показывает предупреждение, причина почти всегда в смешанном содержимом: сама страница зашифрована, но что-то на ней по-прежнему загружается по открытому HTTP. В этом руководстве объясняется, почему это происходит, как найти все проблемные ресурсы и как их исправить правильно, а не замазать проблему.

Что такое смешанное содержимое

Браузер считает страницу безопасной только если страница и всё, что она загружает, пришли по HTTPS. Если страница HTTPS загружает изображение, скрипт, таблицу стилей, шрифт или iframe с адреса http://, браузер это отмечает.

Браузеры разделяют это на две категории, и они ведут себя совершенно по-разному:

  • Активное смешанное содержимое: скрипты, таблицы стилей, iframe и XHR. Браузеры блокируют их полностью. Макеты разваливаются, слайдеры останавливаются, формы не отправляются. Это деструктивный вид.
  • Пассивное смешанное содержимое: изображения, аудио и видео. Они обычно всё ещё загружаются, но замок понижается или удаляется.

Сайт может выглядеть совершенно хорошо и при этом терять замок, или выглядеть сломанным без очевидной ошибки на самой странице.

Почему это происходит после включения SSL

Включение SSL меняет способ отправки вашего сайта. Оно не меняет то, что хранится внутри.

WordPress записывает абсолютные URL в базу данных, так что сайт, работавший на HTTP некоторое время, имеет адреса http://, сохранённые в:

  • Содержимое записей и страниц, включая каждое изображение, вставленное через редактор.
  • Записи медиаприложений.
  • Параметры настройки темы и параметры темы.
  • Содержимое виджетов и параметры блоков.
  • Параметры плагинов, особенно конструкторы страниц и плагины слайдеров.
  • Параметры siteurl и home.

Ничего из этого не обновляется само по себе. Включение SSL и последующее удивление, почему замок повреждён, является одним из самых частых вопросов в поддержке, и вот почему.

Шаг 1: Принудительно использовать HTTPS на сервере

Перед тем как трогать базу данных, убедитесь, что каждый посетитель попадает на HTTPS.

  1. Войдите в KPanel и нажмите Websites на левой боковой панели.
  2. Нажмите на ваш сайт.
  3. Откройте Settings.
  4. В разделе Behavior включите Force HTTPS.
  5. Нажмите Save Changes.

Параметр Force HTTPS для сайта в KPanel

Каждый HTTP-запрос теперь перенаправляется на HTTPS на сервере, перед запуском вашего сайта.

Force HTTPS обрабатывает входящие запросы. Он не переписывает URL-адреса, уже хранящиеся в вашей базе данных, поэтому сам по себе не устранит предупреждение о смешанном содержимом, вызванное закодированным изображением http://. Вам нужны и этот шаг, и шаг 2.

Если SSL ещё не активен или сертификат выглядит неправильно, начните с SSL Certificates.

Шаг 2: Переписать сохранённые URL-адреса

Это исправление, которое на самом деле устраняет смешанное содержимое.

  1. Откройте сайт, затем вкладку WordPress, затем раздел Quick Actions.
  2. Найдите карточку Search & Replace и нажмите Configure.
  3. В поле Find (old value) введите http://yourdomain.co.nz.
  4. В поле Replace with введите https://yourdomain.co.nz.
  5. Оставьте Dry run (preview only, no changes) отмеченным и нажмите Preview.
  6. Проверьте количество и разбивку по таблицам.
  7. Снимите отметку с Dry run, нажмите Run и подтвердите.

Полная резервная копия снимается автоматически перед заменой, и охватываются все таблицы, включая созданные плагинами. Сериализованные параметры плагинов обрабатываются корректно.

Не делайте это с SQL-запросом в phpMyAdmin. WordPress хранит параметры плагинов и тем как сериализованные строки, которые записывают длину каждого значения, поэтому простой REPLACE() их разрывает и параметры молча сбрасываются. Единственное восстановление - восстановление резервной копии. Полное объяснение в Running a Search and Replace.

Если ваш план включает консоль, эквивалентная команда:

search-replace 'http://yourdomain.co.nz' 'https://yourdomain.co.nz' --all-tables --dry-run

Удалите --dry-run для применения, и сделайте резервную копию самостоятельно: консоль этого не делает.

Шаг 3: Очистить все кэши

Кэшированная копия страницы будет продолжать обслуживать старые HTTP URL-адреса намного дольше после исправления базы данных, вот почему люди часто думают, что замена не сработала.

  1. WordPress, затем Quick Actions, затем Flush Cache.
  2. WordPress, затем Caching, затем Purge cache, если полный кэш страницы включен.
  3. Performance, затем Kapsule CDN, затем Purge, если CDN включен. См. Purging the CDN Cache.
  4. Любой плагин кэширования из его собственного экрана параметров.
  5. Ваш собственный браузер. Тестируйте в приватном окне, чтобы не быть обманутым своим собственным кэшем.

Шаг 4: Найти то, что осталось

Большинство сайтов чисты после шага 2. Когда предупреждение сохраняется, найдите точный ресурс, а не гадайте.

Консоль браузера. Откройте инструменты разработчика с F12, перейдите на вкладку Console и перезагрузитесь. Смешанное содержимое появляется как явное предупреждение с указанием полного URL-адреса проблемного ресурса. Этот URL-адрес подскажет вам, какой плагин или тема ответственны.

Вкладка Network. Отфильтруйте по http://, чтобы показать список всех незащищённых запросов, которые сделала страница.

Исходный код страницы. Загрузите страницу, посмотрите исходный код и найдите http://. Игнорируйте всё внутри атрибутов xmlns и объявлений схемы: это идентификаторы, а не запросы.

Обычные оставшиеся проблемы и что делать с каждой:

Что вы нашлиИсправление
Изображение или логотип в параметре настройки темыЗагрузите заново или выберите заново в настройщике
Модуль конструктора страниц с введённым вручную URL-адресом http:// изображенияОтредактируйте этот модуль и исправьте URL
Собственная таблица параметров плагина слайдераПересохраните слайдер или запустите поиск и замену с --all-tables
Шрифт или скрипт из домена третьей стороныПроверьте, предлагает ли поставщик HTTPS. Большинство предлагают. Переключите URL
Отслеживающий пиксель или встроенный код от старого поставщикаЕсли поставщик не поддерживает HTTPS, удалите. Это разорванная зависимость, а не проблема Kapsule
Закодированный http:// в файле шаблона темыОтредактируйте шаблон, или лучше используйте https или протоколо-независимую ссылку

Если затронута ровно одна страница и остальная часть сайта чиста, виновато содержимое на этой странице, а не сайтовая установка. Откройте её в редакторе и посмотрите на медиа, которое она встраивает.

Подтверждение исправления

  1. Загрузите сайт в приватном окне.
  2. Замок должен быть твёрдым, без треугольника предупреждения и без зачёркнутого указания.
  3. Нажмите на замок. Браузер сообщает о безопасном соединении без уведомления о смешанном содержимом.
  4. Откройте консоль и перезагрузитесь ещё раз. Нулевые предупреждения о смешанном содержимом.
  5. Проверьте глубокую страницу, не только домашнюю страницу: внутреннюю страницу, запись блога с изображениями и оформление заказа в магазине.

Предотвращение возвращения проблемы

  • Оставьте Force HTTPS включенным. Это однострочная установка, которая устраняет целый класс проблем.
  • Никогда не вводите полный URL-адрес http:// в содержимое. Используйте медиалибротеку, которая теперь хранит адреса HTTPS.
  • Проверьте параметры плагина после установки всего, что просит URL.
  • Следите за возвращающимся предупреждением после обновления плагина. Некоторые плагины сбрасывают свои собственные сохранённые URL-адреса.
  • Повторите поиск и замену после любой миграции, так как импортированная база данных содержит URL-адреса старого хоста: Migrating a Website From cPanel.

Устранение неполадок

Замок хорош для меня, повреждён для коллеги. Кэшированная страница. Попросите их перезагрузиться в приватном окне.

Сайт полностью сломался после замены. Восстановите автоматическую резервную копию перед запуском: Restoring From a Backup.

Консоль показывает предупреждение о смешанном содержимом в домене, который не мой. Ресурс третьей стороны. Вы не можете исправить их сервер: либо они поддерживают HTTPS и вы переключаете URL, либо вы удаляете ресурс.

Всё HTTPS, но сайт совсем не загружается. Это не смешанное содержимое. Начните с Website Not Loading и проверьте сертификат на SSL Certificates.

Если вы прошли через всё это и предупреждение всё ещё сохраняется, напишите на support@kapsulehost.com с затронутым URL и точным текстом предупреждения консоли браузера.

Вам всё ещё нужна помощь?

Напишите нам на support@kapsulehost.com или откройте чат в KPanel.

Открыть KPanel