这是我在 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'
当其存在且正常运行时。