据我所知,我的设置有些独特和有趣,并且有一个有趣的问题。我有一个 Windows Server 2012 机箱作为我的主要 Web 服务器托管 website.com。http://website.com/sites/我使用 ARR 设置了反向代理,将所有内容指向运行 Apache 的 Debian 机器上安装的 Wordpress WPMU。以下是重写规则配置:
现在,一切都正常运行,但有一件事情搞砸了,那就是如果我通过反向代理转到任何 wp-admin / 页面,我会得到一个重定向循环:
为了准确描述,以下是我的.htaccess 文件和我的wp-config.php 文件(省略了明显的内容)。
有趣的是,如果我更改本地主机文件以将我的域指向 Debian IP 地址并绕过 IIS ARR,则 wp-admin/ 可以正常工作,不会出现任何问题。看来我的问题出在 IIS 和 Apache 之间的转换上?我不知道该看什么并进一步调试它。
任何帮助都将不胜感激!
答案1
可能是因为主持人标头已被 ARR 修改。
GET http://10.48.100.27/ HTTP/1.1
Host: 10.48.100.27
HTTP/1.1 301 Moved Permanently
Location: http://example.com/
使用保留主机头设置以保持标题不变。
答案2
我想知道正则表达式是否会被 apache 中的重写引擎混淆。您是否尝试过禁用.htaccess 文件并改为以“.../wp-admin/admin.php”的形式访问“.../wp-admin/”中的实际文件?
答案3
解决该问题的方法包括识别实际问题。
如果出于安全要求而有必要,我会https
在测试或暂存网络中暂时禁用管理站点。
然后,我会嗅探来自 IIS/ARR 主机或 Apache 主机的相关流量,以查看当您调用管理页面时主机之间实际上发生了什么。客户端与 IIS 以及客户端与 Apache 之间的流量的控制转储可能也有帮助。使用您最喜欢的嗅探器,否则让我建议Wireshark对于 Windows 或tcpdump对于 Linux。
我确信您会很快发现是否存在重定向问题、正则表达式 URL 解释问题或其他问题。解决方案当然取决于您实际发现的内容。
这是我所知道的调试反向代理异常的最佳方法,因为人们根据事实来缩小问题范围,而不是根据猜测来扩大问题范围。
为了获得分析帮助,我将发布两个过滤的数据包转储:一个用于通过 IIS 反向代理,一个用于直接连接到 Apache,并突出显示差异。