WordPress за HAproxy

Вопрос или проблема

Я хочу запустить WordPress за SSL-терминированным haproxy. Но я не могу это сделать, потому что есть смешанное содержимое (http). Все файлы CSS загружаются через http.

Это моя конфигурация haproxy.

   backend test_example_com
   mode http
   option forwardfor
   balance roundrobin
   http-request set-header X-Forwarded-Proto %[dst_port]
   server example 172.29.1.26:80 check

Это мой wp-config.php

/* Добавьте любые пользовательские значения между этой строкой и строкой "остановите редактирование". */

define( 'FORCE_SSL_ADMIN', true );

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

if( false !== strpos( $_SERVER['HTTP_X_FORWARDED_PROTO'], 'https' ) ) {
    $_SERVER['HTTPS'] = 'on';
}

define( 'WP_HOME', 'https://test.example.com' );
define( 'WP_SITEURL', 'https://test.example.com' );

define('.COOKIE_DOMAIN.', 'test.example.com');
define('.SITECOOKIEPATH.', '.');

define('WP_CONTENT_URL', 'https://test.example.com/wp-content');

$_SERVER['HTTP_HOST'] = 'test.example.com';
$_SERVER['REMOTE_ADDR'] = 'https://test.example.com';
$_SERVER[ 'SERVER_ADDR' ] = 'test.example.com';

/* На этом все, остановите редактирование! Удачной публикации. */

/** Абсолютный путь к директории WordPress. */
if ( ! defined( 'ABSPATH' ) ) {
        define( 'ABSPATH', __DIR__ . "https://wordpress.stackexchange.com/" );
}

/** Настраивает переменные WordPress и включенные файлы. */
require_once ABSPATH . 'wp-settings.php';

Вот журнал консоли моего браузера

Смешанное содержимое: Страница по адресу 'https://test.example.com/wp-admin/' загружена через HTTPS, но запрашивала небезопасный стилист 'http://test.example.com/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=dashicons,admin-bar,common,forms,admin-menu,dashboard,list-tables,edit,revisions,media,themes,about,nav-menus,wp-pointer,widgets&load%5Bchunk_1%5D=,site-icon,l10n,buttons,wp-auth-check&ver=6.3'. Этот запрос был заблокирован; содержимое должно быть обслужено через HTTPS.
test.example.com/:152 Смешанное содержимое: Страница по адресу 'https://test.example.com/wp-admin/' загружена через HTTPS, но запрашивала небезопасный стилист 'http://test.example.com/wp-includes/js/thickbox/thickbox.css?ver=6.3'. Этот запрос был заблокирован; содержимое должно быть обслужено через HTTPS.
28Смешанное содержимое: Страница по адресу '<URL>' загружена через HTTPS, но запрашивала небезопасный скрипт '<URL>'. Этот запрос был заблокирован; содержимое должно быть обслужено через HTTPS.
(index):168 Uncaught DOMException: Не удалось выполнить 'replaceState' в 'History': объект состояния истории с URL 'http://test.example.com/wp-admin/' не может быть создан в документе с источником 'https://test.example.com' и URL 'https://test.example.com/wp-admin/'.
    в https://test.example.com/wp-admin/:168:19

Может кто-нибудь сказать, как избавиться от смешанного содержимого?
Пожалуйста, помогите.

Я нашел вашу публикацию, искал похожее решение. У меня настроен haproxy, и я тоже пытаюсь установить WordPress на сервере за кулисами.

Я нашел эту страницу: https://www.wpbeginner.com/plugins/how-to-fix-the-mixed-content-error-in-wordpress-step-by-step/, где подробно описаны некоторые настройки HTTPS, которые вы можете изменить в настройках WordPress, чтобы это исправить.

Для haproxy, глядя на вашу конфигурацию, вы, вероятно, хотите, чтобы метод обнаружения SSL был опцией X_FORWARDED_FOR_PROTO. Я не уверен, какая опция будет работать лучше для исправления небезопасного содержимого SSL, но я бы начал с простой и постепенно повышал уровень.

Для себя, когда я переустановлю, я, вероятно, перейду в корень сайта WordPress, затем сделаю grep http:// и заменю его на https:// с помощью sed. Я не могу поручиться за этот метод, и он также не будет применим к любым плагинам или темам, если вы не повторите этот метод снова после их установки.

Ответ или решение

Если вы хотите развернуть WordPress за SSL-терминированным HAProxy и столкнулись с проблемой смешанного контента, важно правильно настроить как конфигурацию HAProxy, так и параметры вашего WordPress. Рассмотрим все аспекты, которые могут помочь решить данную проблему.

Настройка конфигурации HAProxy

Ваш текущий конфигурационный файл HAProxy для бэкенда выглядит следующим образом:

backend test_example_com
   mode http
   option forwardfor
   balance roundrobin
   http-request set-header X-Forwarded-Proto %[dst_port]
   server example 172.29.1.26:80 check

Вам необходимо изменить параметр X-Forwarded-Proto, чтобы HAProxy правильно информировал сервер о том, что соединение является защищенным (HTTPS). Вместо использования переменной %[dst_port], укажите протокол. Вот измененный вариант:

backend test_example_com
   mode http
   option forwardfor
   balance roundrobin
   http-request set-header X-Forwarded-Proto https
   server example 172.29.1.26:80 check

Настройка wp-config.php

Теперь рассмотрим ваш файл wp-config.php. Вы уже настроили несколько параметров, но некоторые строки можно улучшить. Убедитесь, что сервер корректно обрабатывает переменные заголовков:

define( 'FORCE_SSL_ADMIN', true );

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

define( 'WP_HOME', 'https://test.example.com' );
define( 'WP_SITEURL', 'https://test.example.com' );

define( 'COOKIE_DOMAIN', 'test.example.com' );
define( 'SITECOOKIEPATH', '/' );

define( 'WP_CONTENT_URL', 'https://test.example.com/wp-content' );

// Убедитесь, что HTTP_HOST корректно установлен
$_SERVER['HTTP_HOST'] = 'test.example.com';

// Этот параметр не нужен и может вызвать путаницу
// $_SERVER['REMOTE_ADDR'] = 'https://test.example.com';

// Прямо определить абсолютный путь к WordPress не нужно делать так
define( 'ABSPATH', __DIR__ . '/' );

require_once ABSPATH . 'wp-settings.php';

Устранение смешанного контента

Основная проблема с смешанным контентом возникает из-за того, что некоторые ресурсы запрашиваются по протоколу HTTP, а не HTTPS. Чтобы устранить эту проблему, рассмотрите следующие шаги:

  1. Используйте плагин для исправления смешанного контента: Плагин, такой как Really Simple SSL или SSL Insecure Content Fixer, может автоматически помочь в решении проблемы смешанного контента.

  2. Обновите URL-адреса: Если у вас есть ссылки на старые HTTP-ресурсы в базе данных (например, изображения или стили), используйте команду search and replace для обновления их на HTTPS:

    wp search-replace 'http://test.example.com' 'https://test.example.com' --skip-columns=guid
  3. Проверка плагинов и тем: Убедитесь, что ваши плагины и темы также соответствуют стандартам HTTPS. Обновите их настройки, если они ссылаются на неоправданные HTTP-ресурсы.

  4. Проверка и аудит: Используйте инструменты для проверки безопасности, такие как Why No Padlock?, чтобы найти источники смешанного контента и устранить их.

Заключение

Настройка WordPress за HAProxy с SSL может потребовать некоторых усилий, особенно в контексте смешанного контента. Следуя вышеуказанным рекомендациям, вы сможете устранить проблемы и обеспечить безопасное соединение для ваших пользователей. Оптимальная конфигурация HAProxy и корректно настроенный wp-config.php сыграет ключевую роль в успехе этого процесса.

Оцените материал
Добавить комментарий

Капча загружается...