Как разместить сайт WordPress за балансировщиком нагрузки AWS
У нас есть старый сайт wordpress, размещенный на сервере AWS EC2 linux, который я пытаюсь поставить за балансировщик нагрузки, чтобы я мог использовать HTTPS и WAF. Я несколько опытный системный администратор, но очень новичок в Wordpress. У меня возникают проблемы с загрузкой контента через HTTPS, при этом я не попадаю в цикл перенаправления между балансировщиком нагрузки и сервером.
У меня есть настройка балансировщика нагрузки, чтобы разговаривать с сервером на порту 80, и если WP_SITEURL / WP_HOME установлен на http: //, я получаю кучу ошибок смешанного содержимого в консоли chrome dev, потому что он пытается загрузить скрипты и css поверх http. Если я изменю WP_SITEURL / WP_HOME на https: //, это создаст цикл перенаправления, потому что wordpress продолжает пытаться перенаправить балансировщик нагрузки, который пытается связаться через порт 80, на https.
Есть ли способ разрешить подсистеме балансировки нагрузки достигать сервера через порт 80, сохраняя при этом базовый URL-адрес ресурсов, скриптов и т. Д. Https?
Ответы
Когда WordPress находится за прокси https (ваш балансировщик нагрузки), он не знает, что https включен. Прокси работает через https (порт 443), но связь между прокси и WordPress осуществляется через http (порт 80). Для WordPress трафик проходит через http, поэтому вы получаете цикл перенаправления с https на http (WordPress) и снова с http на https (через прокси). Вам нужно заставить WordPress начать работу по https.
Вставьте эту строку в свой wp-config.php
$_SERVER['HTTPS'] = 'on';
Иногда прокси отправляют дополнительный заголовок HTTP_X_FORWARDED_PROTO
в WordPress, чтобы сообщить, что исходный трафик находится на https. Вы можете использовать его для большей гибкости
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on';
}
Измените WP_SITEURL
и WP_HOME
используйте https. И замените все ссылки в базе на https.
Справка: https://developer.wordpress.org/reference/functions/is_ssl/