我的 Apache 反向代理将代码添加到从 head 标记获取的 HTML 文件的正文中
Posted
技术标签:
【中文标题】我的 Apache 反向代理将代码添加到从 head 标记获取的 HTML 文件的正文中【英文标题】:My Apache reverse proxy adds code to body of fetched HTML files from head tag 【发布时间】:2016-11-05 06:32:53 【问题描述】:我有一个使用 Apache 2.4.20 的简单反向代理服务器,它从内部 Apache Web 服务器获取 html 文件。页面获取和 URL 重写工作正常,但出现了问题。
任何网页通过代理后,三件事都不正确:head标签的内容出现在body中,head标签丢失,在“p”标签中添加了一个神秘的“>”字符正文标签的顶部。
这个额外的<p>></p>
代码向我表明检测HTML 标记有问题(它可能是<head>
的一部分)。另外,即使 head 标签中没有内容,body 标签仍然以那个奇怪的代码开头。
代理内容 - 在开发者工具、Google Chrome 浏览器中查看:
代理内容 - 提取文件的原始来源:
原始 HTML 文件 - 直接从内部服务器文件系统打开:
代理服务器配置文件 - 关于传输和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 .
【问题讨论】:
我现在使我的帖子更清晰,格式更好,希望它更有用,更容易思考。我目前无法访问提到的服务器,但问题应该是可重现的。 是的,我确认有同样的问题。这很奇怪,因为我对其他站点也使用了相同的反向代理,并且它们工作正常( 未被删除),并且它们具有相同的设置。我通过验证器运行了 html 文件,它没有发出任何警告,但是,proxyhtml 无缘无故地剥离了 和 ,也没有好的结果。 【参考方案1】:我有同样的问题。但是,在同一台机器上,使用相同反向代理的其他站点运行良好,即使它们具有完全相同的配置,但 URL 不同。我无法理解......除非我注意到有问题的文件在文件开头有BOM signature!
这导致 ProxyHTML 非常混乱,以至于它删除了 <head>
和 </head>
标记。
使用dos2unix
实用程序删除 BOM 后,文件显示正确。
你的帖子给了我更多的动力来解决这个问题。谢谢。
【讨论】:
【参考方案2】:你正在使用 mod_proxy_html
此模组将尝试根据指令影响代理的 HTML 资源。我的建议是删除 ProxyHTML 指令,看看会发生什么。如果它不受影响,那么您就知道它与 mod_proxy_html 有关。
然后看看在ProxyHTMLEnable下面添加这个指令
ProxyHTMLFixups off
【讨论】:
正如我所怀疑的,mod_proxy_html 导致了我的问题(关闭它可以解决问题)。这对我来说不是一个解决方案,因为我需要它来重写代理文档中的相对 URL 引用。另外,尝试ProxyHTMLFixups off
没有用(看看它的documentation,我不明白为什么它会导致错误)。看着整个documentation,我不知道是什么导致了我的问题。
我现在使我的帖子更清晰,格式更好,希望它更有用,更容易思考。如果您有任何想法,您可以提供更多想法。我目前无法访问提到的服务器,但问题应该是可重现的。【参考方案3】:
你的问题是文档类型定义
<!DOCTYPE html/>
标签不应关闭。它应该是这样的:
<!DOCTYPE html>
mod_proxy_html 尝试通过将其包装在段落中来修复它所看到的额外 >
字符。
【讨论】:
以上是关于我的 Apache 反向代理将代码添加到从 head 标记获取的 HTML 文件的正文中的主要内容,如果未能解决你的问题,请参考以下文章
HTTP/2 的 Apache 反向代理将丢失 MIME 类型并使用默认值