Как разместить сайт WordPress за балансировщиком нагрузки AWS

Aug 18 2020

У нас есть старый сайт 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?

Ответы

1 kierzniak Aug 27 2020 at 23:59

Когда 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/