Проблемы с Mixed Content и SSL в WordPress за обратным прокси
Я столкнулся с проблемами Mixed Content при использовании SSL. Я получил SSL-сертификат Let's Encrypt для своего тестового сайта WordPress, работающего за обратным прокси (articaproxy).
Тот же SSL-сертификат был развернут на сервере обратного прокси и в виртуальном хосте WordPress.
Перенаправление HTTP/HTTPS на обратном прокси работает корректно.
Я принудительно изменил siteurl и home url на HTTPS в базе данных MySQL для тестирования HTTPS.
При открытии моего сайта WordPress и нажатии "Показать заблокированный контент" в консоли Chrome появляется сообщение 'This page is insecure (broken HTTPS)'.
Консоль Chrome также сообщает, что некоторые таблицы стилей/скрипты/изображения не загружаются по HTTPS
Я пробовал установить различные плагины для решения этой проблемы, но безуспешно. Поэтому они отключены.
Админка WordPress не загружается из-за ошибки ERR_TOO_MANY_REDIRECTS.
Мне нужно узнать, как исправить проблемы с Mixed Content и бесконечными редиректами на странице входа в админку.
Буду благодарен за любые предложения.
****************** Обновление ***********************
Хочу предоставить больше деталей о настройках моего тестового сайта WordPress.
Часть значений из wp-config.php, связанных с WP_SITEURL, WP_HOME, HTTPS:
define('WP_SITEURL', 'https://'.$_SERVER['HTTP_HOST']);
define('WP_HOME', 'https://'.$_SERVER['HTTP_HOST']);
define('FORCE_SSL_ADMIN', true);
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';
Значения 'siteurl' и 'home' из таблицы wp_options в базе данных WordPress:
https://yuantafood.i-shopping.email
https://yuantafood.i-shopping.email
Как я упоминал выше, я могу войти в админку только по внутреннему IP-адресу. Попытка входа по внешнему IP/FQDN не загружается из-за ошибки: ERR_TOO_MANY_REDIRECTS.
Изучив множество статей, принудительное включение SSL через .htaccess, похоже, помогло другим решить проблемы с Mixed Content.
Я также пробовал различные методы редактирования .htaccess, в основном 301 постоянное перенаправление и 302 временное перенаправление.
Содержимое файла .htaccess в папке WordPress (301):
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteBase /
# RewriteRule ^index\.php$ - [L]
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule . /index.php [L]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://yuantafood.i-shopping.email/$1 [R=301,L]
</IfModule>
# END WordPress
# Wordfence WAF
<IfModule mod_php5.c>
php_value auto_prepend_file '/var/www/wordpress/wordfence-waf.php'
</IfModule>
<Files ".user.ini">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
</Files>
# END Wordfence WAF
И 301, и 302 редиректы не сработали и привели к тому, что весь сайт перестал загружаться из-за ERR_TOO_MANY_REDIRECTS.
Вы изменили "Адрес WordPress (URL)" и "Адрес сайта (URL)" в Настройки → Основные в админке WordPress с http на https? Очистили кеш и проверили снова? Если всё ещё есть смешанные протоколы, вероятно, они пришли из жёстко прописанных URL, таких как изображения или внешние ссылки. Вы можете оставить как есть или исправить. Я проходил через это при переходе на SSL, можете посмотреть последнюю часть моей статьи.

Спасибо за ответ.
Поскольку я принудительно установил поля siteurl и home в таблице wp_options со значением 'https://yuantafood.i-shopping.email'
Поля "Адрес WordPress (URL)" и "Адрес сайта (URL)" в Настройках стали серыми: http://imgur.com/C4ajdBx
Я очистил кеш и проверил снова, проблема со смешанным контентом осталась.
Я могу войти в админку только с внутреннего IP-адреса. Это не вызывает ошибку ERR_TOO_MANY_REDIRECTS: http://imgur.com/YBrUess
Спасибо за статью, Why No Padlock - очень полезный сайт.
Установка правила перенаправления с HTTP на HTTPS в .htaccess работает у других, но не у меня.

Вы используете Apache или Nginx? .htaccess работает только для Apache.

Удалите все плагины для принудительного использования SSL, вернитесь к стандартным настройкам в файлах wp-config.php
и .htaccess
перед тем, как применять принудительное использование HTTPS. Это устранит все конфликты и бесконечные перенаправления (редиректы). После этого выполните следующие шаги:
- Скачайте скрипт для поиска и замены в базе данных от Interconnect IT здесь
- Распакуйте архив и поместите папку в корневую директорию вашего WordPress, переименовав её в
replace
(скриншот) - Перейдите в созданную папку через браузер (например:
http://yuantafood.i-shopping.email/replace
) и вы увидите инструмент поиска/замены - В полях "search for…" (искать) и "replace with…" (заменить на):
- Заменить:
http://yuantafood.i-shopping.email/
(HTTP, без SSL) - На:
https://yuantafood.i-shopping.email/
(HTTPS)
- Заменить:
Вы можете нажать кнопку dry run (пробный запуск) в разделе actions (действия), чтобы увидеть, какие изменения будут внесены, перед выполнением скрипта. После завершения не забудьте удалить папку /replace/
.
Выполнение этих шагов гарантирует, что все ваши ссылки будут работать через HTTPS. Однако, вы также можете использовать плагин Remove HTTP, чтобы убедиться в отсутствии проблем со смешанным контентом.

Привет~ Я уже запускал скрипт Search & Replace DB ранее.
Следуя вашим шагам, я запустил его снова.
Очень удивительно, что значение:'http://yuantafood.i-shopping.email/' до сих пор можно найти в таблице wp_wfHits!
Они генерируются автоматически? Вот мой скриншот после запуска search & replace.
Благодаря вам количество смешанного контента сократилось до 1. И раздражающая ошибка ERR_TOO_MANY_REDIRECTS исчезла на внешней ссылке страницы wp-admin :)
смешанный контент: wp-emoji-release.min.js

@Owen В дальнейшем вы не должны сталкиваться с HTTP-запросами с вашего сайта, так как они все обновлены. Если вы используете какой-либо плагин кеширования, обязательно очистите кеш на вашем сайте и в браузере. Вы используете плагин Remove HTTP?

Спасибо! Благодаря всей вашей помощи я на пути к успеху. Как очистить кеш на WordPress сайте? Я использую плагин Remove HTTP, как предложил Ethan. После включения и отключения теста Remove HTTP, количество смешанного контента сократилось до 1. Список моих текущих активных плагинов.

@Owen Похоже, ни один из этих плагинов не вызывает проблем. Если я вручную введу https://yuantafood.i-shopping.email
, сайт загрузится с SSL без ошибок. Это означает, что ваш вопрос решён. Чтобы избежать перегрузки этой ветки комментариями и ухода от темы, отметьте мой ответ галочкой и создайте новый вопрос о том, как принудительно использовать HTTPS (SSL) на вашем сайте.

Прочитав статью в блоге PIOTR KUNICKI, я последовал инструкциям по удалению Emoji. (Вам придётся повторить это после обновления версии активной темы.)
Это сработало! Зелёный замок отображается без предупреждений. (Хотя в админке WordPress остались некоторые предупреждения о смешанном содержимом.)
Следующий шаг — принудительно перенаправлять все HTTP-URL на HTTPS. Будьте добры, подскажите, как это сделать :)

@Owen Рад, что половина проблемы решена. Создайте новую ветку обсуждения или поищите предыдущие вопросы. Попробуйте запросы вроде "принудительное ssl" или "принудительный https".

Я просто последовал другому комментарию от @thaevok. Добавление $_SERVER['HTTPS'] = 'on'; в wp-config.php сработало для меня. Теперь http корректно перенаправляет на https.
