Цикл перенаправления wp-admin при использовании обратного прокси-сервера apache

Это мой первый пост в Server Fault, так что я прошу прощения за любые ошибки:)

Проблема: Когда я пытаюсь получить доступ к " http://dummy_server/wp-admin", который находится за Apache, действующим как WAF, он застревает в бесконечном цикле перенаправления.

Полная конфигурация HAProxy и WAF может быть найдена здесь https://www.haproxy.com/blog/scalable-waf-protection-with-haproxy-and-apache-with-modsecurity/

Для чего я мог бы исследовать, если я получаю доступ к серверу dummy_server при выключении VH Apache (т.е. только с использованием прокси-сервера HA), когда я выполняю GET для dummy_server/wp-admin, сервер отвечает

HTTP/1.1 302 Found
Date: Wed, 20 Feb 2019 19:00:49 GMT
Location: https://dummy_server/wp-login.php?redirect_to=.....

Затем браузер перенаправляет на dummy_server/wp-login и ожидает учетные данные пользователя.

Тем не менее, если я сделаю GET для dummy_server с активированным WAF, заголовок Location изменится на

Location: https://dummy_server/wp-admin

и процессы застряли в цикле перенаправления.

Если я перехожу к конфигурации WAF (я использую modsecurity), чтобы apache действовал только как обратный прокси-сервер, но проблема сохраняется.

Вот конфигурация виртуальной машины:

<VirtualHost *:90>
       <IfModule mod_security2.c>
                Include /etc/apache2/owasp-modsecurity-crs/crs-setup.conf
                SecRuleEngine On
                SecRequestBodyAccess On
                SecResponseBodyAccess On
        </IfModule>
        ProxyPreserveHost On
        ProxyRequests Off
        ProxyVia Off
        ProxyPass / http://192.168.57.22:81/
        ProxyPassReverse / http://192.168.57.22:81/
</VirtualHost>

Я искал на сайте, но я не нашел ничего, что поможет мне в моем нынешнем затруднительном положении. Есть идеи?

Спасибо!

2 ответа

Решение

Проблема здесь в том, что ваш интернет-сервер использует https, но связь между этим сервером и Apache2 http,

Затем Wordpress видит, что входящее соединение приходит с http протокол, но URL сайта был определен как https, Вот почему Wordpress отправляет перенаправление пользователю.

Я исправил эту проблему, добавив следующую строку в wp-config.php,

$_SERVER['HTTPS'] = on;

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

Вы также должны иметь надлежащее Host Заголовки также отправляются на прокси-сервер.

В вашем haproxy.cfg в разделе внешнего интерфейса добавьте:

      http-request set-header X-Forwarded-Proto https if { ssl_fc }

WordPress читает этот заголовок и устанавливает$_SERVER['HTTPS']к'on'когда он присутствует и ведет себя правильно.

Другие вопросы по тегам