wp-admin 在 apache 反向代理后面重定向循环

wp-admin 在 apache 反向代理后面重定向循环

这是我在 Server Fault 上的第一篇帖子,如有不当之处,敬请原谅 :)

问题:当我尝试访问“http://dummy_server/wp-admin“这是在充当 WAF 的 Apache 后面,它陷入了无限重定向循环。

HAProxy 和 WAF 的完整配置可在此处找到https://www.haproxy.com/blog/scalable-waf-protection-with-haproxy-and-apache-with-modsecurity/

我可以调查的是,如果我在关闭 apache VH(即仅使用 HA 代理)的情况下访问 dummy_server,当我对 dummy_server/wp-admin 执行 GET 操作时,服务器会响应

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 并等待用户凭据。

尽管如此,如果我在激活 WAF 的情况下对 dummy_server 执行 GET 操作,地点标题更改为

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>

我一直在网站上搜索,但没有找到任何能帮助我解决当前困境的东西。有什么想法吗?

谢谢!

答案1

这里的问题是,面向 Internet 的 Web 服务器正在使用https,但该服务器与 Apache2 之间的通信是http

然后,Wordpress 看到传入连接使用协议传入http,但站点 URL 已定义为https。这就是 Wordpress 向用户发送重定向的原因。

我已通过添加以下行来解决此问题wp-config.php

$_SERVER['HTTPS'] = 'on';

我不知道这是否是处理此问题的首选方法,但它对我来说有效。

您还需要将适当的Host标头发送到代理服务器。

答案2

在 haproxy.cfg 的前端部分添加:

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

WordPress 读取此标题并设置$_SERVER['HTTPS']'on'当其存在且正常运行时。

相关内容