Проблемы с Mixed Content и SSL в WordPress за обратным прокси

22 янв. 2017 г., 23:00:43
Просмотры: 14.2K
Голосов: 2

Я столкнулся с проблемами 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 Таблицы стилей, скрипты и изображения не загружаются по HTTPS

Я пробовал установить различные плагины для решения этой проблемы, но безуспешно. Поэтому они отключены. Плагины для исправления Mixed Content

Админка 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.

1
Комментарии

Вот два скриншота и наблюдения событий обратного прокси о неудачном перенаправлении HTTP на HTTPS.

301 редирект &

302 редирект

Owen Owen
25 янв. 2017 г. 21:55:03
Все ответы на вопрос 2
3

Вы изменили "Адрес WordPress (URL)" и "Адрес сайта (URL)" в Настройки → Основные в админке WordPress с http на https? Очистили кеш и проверили снова? Если всё ещё есть смешанные протоколы, вероятно, они пришли из жёстко прописанных URL, таких как изображения или внешние ссылки. Вы можете оставить как есть или исправить. Я проходил через это при переходе на SSL, можете посмотреть последнюю часть моей статьи.

23 янв. 2017 г. 15:14:56
Комментарии

Спасибо за ответ.

Поскольку я принудительно установил поля 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 работает у других, но не у меня.

Owen Owen
23 янв. 2017 г. 19:14:11

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

hcheung hcheung
24 янв. 2017 г. 02:20:33

Привет~ Я использую Apache версии 2.4.10.

Owen Owen
24 янв. 2017 г. 08:11:23
7

Удалите все плагины для принудительного использования SSL, вернитесь к стандартным настройкам в файлах wp-config.php и .htaccess перед тем, как применять принудительное использование HTTPS. Это устранит все конфликты и бесконечные перенаправления (редиректы). После этого выполните следующие шаги:

  1. Скачайте скрипт для поиска и замены в базе данных от Interconnect IT здесь
  2. Распакуйте архив и поместите папку в корневую директорию вашего WordPress, переименовав её в replace (скриншот)
  3. Перейдите в созданную папку через браузер (например: http://yuantafood.i-shopping.email/replace) и вы увидите инструмент поиска/замены
  4. В полях "search for…" (искать) и "replace with…" (заменить на):
    • Заменить: http://yuantafood.i-shopping.email/ (HTTP, без SSL)
    • На: https://yuantafood.i-shopping.email/ (HTTPS)

Вы можете нажать кнопку dry run (пробный запуск) в разделе actions (действия), чтобы увидеть, какие изменения будут внесены, перед выполнением скрипта. После завершения не забудьте удалить папку /replace/.

Выполнение этих шагов гарантирует, что все ваши ссылки будут работать через HTTPS. Однако, вы также можете использовать плагин Remove HTTP, чтобы убедиться в отсутствии проблем со смешанным контентом.

25 янв. 2017 г. 21:24:25
Комментарии

Привет~ Я уже запускал скрипт 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 Owen
25 янв. 2017 г. 23:10:20

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

Ethan Rævan Ethan Rævan
25 янв. 2017 г. 23:27:26

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

Owen Owen
25 янв. 2017 г. 23:45:30

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

Ethan Rævan Ethan Rævan
26 янв. 2017 г. 04:31:06

Прочитав статью в блоге PIOTR KUNICKI, я последовал инструкциям по удалению Emoji. (Вам придётся повторить это после обновления версии активной темы.)

Это сработало! Зелёный замок отображается без предупреждений. (Хотя в админке WordPress остались некоторые предупреждения о смешанном содержимом.)

Следующий шаг — принудительно перенаправлять все HTTP-URL на HTTPS. Будьте добры, подскажите, как это сделать :)

Owen Owen
26 янв. 2017 г. 04:49:40

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

Ethan Rævan Ethan Rævan
26 янв. 2017 г. 07:20:49

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

Owen Owen
27 янв. 2017 г. 21:27:31
Показать остальные 2 комментариев