我有一个使用Apache 2.4.20的简单反向代理服务器,它从内部Apache Web服务器获取HTML文件。页面提取和URL重写工作正常,但是出现了问题。
在通过代理传递任何网页后,有三件事是不正确的:头标记的内容出现在正文中,头标记丢失了,并且是一个神秘的">" " p"标签添加在body标签的顶部。
这个额外的<p>></p>
代码向我建议检测HTML标记时出错(它可能是<head>
的一部分)。此外,即使没有head标签中的内容,body标签仍然以奇怪的代码开头。
代理内容 - 在开发者工具,Google Chrome浏览器中查看
代理服务器配置文件 - 有关转移的部分和ProxyHTML
:
我知道原始服务器工作正常,所以这不会导致问题
以下是直接从浏览器(代理服务器设备)上的原始服务器查看的HTML文件的屏幕截图,以及Chrome开发者工具中显示的源代码:
更新:正如预期的那样, mod_proxy_html 是我的问题的主要原因(将其关闭原始文件)。但是,这个对我来说不是一个解决方案,因为我需要该工具来重写代理文档中的相对URL引用。我阅读了documentation page,但它没有描述任何无疑造成我问题的功能。
来自documentation的 mod_proxy_html 指令列表,我认为这些指令并不相关,有些经过测试: ProxyHTMLBufSize , ProxyHTMLCharsetOut , ProxyHTMLDocType , ProxyHTMLEnable , ProxyHTMLEvents , ProxyHTMLExtended (默认关闭), ProxyHTMLFixups (尝试建议), ProxyHTMLInterp , ProxyHTMLLinks , ProxyHTMLMeta (默认关闭), ProxyHTMLStripComments , ProxyHTMLURLMap
答案 0 :(得分:1)
我有同样的问题。但是,在同一台计算机上,即使使用完全相同的配置但不同的URL,使用相同反向代理的其他站点也可以正常工作。我听不懂...,除非我注意到有问题的文件在文件开头有BOM signature!
这导致ProxyHTML混乱不堪,以至于它删除了<head>
和</head>
标签。
使用dos2unix
实用工具删除BOM表后,文件显示正确。
您的帖子给了我更多与之抗争的动力。谢谢。
答案 1 :(得分:0)
您正在使用mod_proxy_html
此mod将尝试根据指令影响代理的HTML资源。我的建议是删除ProxyHTML指令并查看返回的内容。如果它不受影响,那么你就知道它与mod_proxy_html有关。
然后看看在ProxyHTMLEnable
下添加此指令ProxyHTMLFixups off
答案 2 :(得分:0)
你的问题是文档类型定义
<!DOCTYPE html/>
标签不应关闭。它应该是这样的:
<!DOCTYPE html>
mod_proxy_html 尝试通过将其包装在段落中来修复它所看到的额外 >
字符。