<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 模块

Apache 模块 mod_proxy_html

可用语言:  en  |  fr 

描述重写 HTML 链接以确保它们在代理上下文中可从客户端网络访问。
状态基础
模块标识符proxy_html_module
源文件mod_proxy_html.c
兼容性版本 2.4 及更高版本。对于早期 2.x 版本,可作为第三方模块使用

摘要

此模块提供一个输出过滤器,用于在代理情况下重写 HTML 链接,以确保链接对代理外部的用户有效。它与 Apache 的 ProxyPassReverse 指令对 HTTP 标头的作用相同,是反向代理的重要组成部分。

例如,如果一家公司在 appserver.example.com 上有一个应用程序服务器,该服务器只能从公司内部网络访问,而有一个公共 Web 服务器 www.example.com,他们可能希望在 http://www.example.com/appserver/ 上提供一个通往应用程序服务器的网关。当应用程序服务器链接到自身时,这些链接需要被重写以通过网关工作。 mod_proxy_html 用于将 <a href="http://appserver.example.com/foo/bar.html">foobar</a> 重写为 <a href="http://www.example.com/appserver/foo/bar.html">foobar</a>,使其从外部访问。

mod_proxy_html 最初由 WebÞing 开发,其广泛的 文档 可能对用户有用。

Support Apache!

指令

错误修复清单

另请参阅

top

ProxyHTMLBufSize 指令

描述设置用于缓冲内联脚本和样式表的缓冲区大小增量。
语法ProxyHTMLBufSize bytes
默认值ProxyHTMLBufSize 8192
上下文服务器配置、虚拟主机、目录
状态基础
模块mod_proxy_html
兼容性版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用

为了解析嵌入在 HTML 文档中的非 HTML 内容(样式表和脚本),mod_proxy_html 必须将整个脚本或样式表读入缓冲区。此缓冲区将根据需要扩展,以增量方式容纳页面中最大的脚本或样式表,增量由此指令设置的 bytes 决定。

默认值为 8192,对于几乎所有页面都适用。但是,如果您知道您正在代理包含大于 8K 的样式表和/或脚本的页面(即,对于单个脚本或样式表,而不是总计),则设置更大的缓冲区大小将更有效,并且可以避免在请求期间动态调整缓冲区大小的需要。

top

ProxyHTMLCharsetOut 指令

描述为 mod_proxy_html 输出指定字符集。
语法ProxyHTMLCharsetOut Charset | *
上下文服务器配置、虚拟主机、目录
状态基础
模块mod_proxy_html
兼容性版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用

这将选择 mod_proxy_html 输出的编码。通常不应使用它,因为任何与默认 UTF-8(Unicode - libxml2 内部使用)的更改都会带来额外的处理开销。特殊标记 ProxyHTMLCharsetOut * 将使用与输入相同的编码生成输出。

请注意,这依赖于 mod_xml2enc 已加载。

top

ProxyHTMLDocType 指令

描述设置 HTML 或 XHTML 文档类型声明。
语法ProxyHTMLDocType HTML|XHTML [Legacy]

ProxyHTMLDocType fpi [SGML|XML]
上下文服务器配置、虚拟主机、目录
状态基础
模块mod_proxy_html
兼容性版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用

在第一种形式中,文档将根据所选选项声明为 HTML 4.01 或 XHTML 1.0。此选项还决定输出使用 HTML 或 XHTML 语法。请注意,来自后端服务器的文档格式无关紧要:解析器将自动处理它。如果可选的第二个参数设置为 Legacy,则文档将被声明为“Transitional”,如果您正在代理 1998 年之前的內容或使用有缺陷的创作/发布工具,则可能需要此选项。

在第二种形式中,它将插入您自己的 FPI。可选的第二个参数决定使用 SGML/HTML 或 XML/XHTML 语法。

默认值已更改为省略任何 FPI,理由是,没有 FPI 比虚假 FPI 更好。如果您的后端生成良好的 HTML 或 XHTML,请相应地设置它。

如果使用第一种形式,mod_proxy_html 还将清理 HTML 以符合指定的标准。它无法修复所有错误,但它将删除虚假元素和属性。它还将可选地在 LogLevel Debug 级别记录其他错误。

top

ProxyHTMLEnable 指令

描述打开或关闭 proxy_html 过滤器。
语法ProxyHTMLEnable On|Off
默认值ProxyHTMLEnable Off
上下文服务器配置、虚拟主机、目录
状态基础
模块mod_proxy_html
兼容性版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用。

一个简单的开关,用于启用或禁用 proxy_html 过滤器。如果 mod_xml2enc 已加载,它还将自动设置国际化支持。

请注意,proxy_html 过滤器将仅对 HTML 数据(Content-Type text/html 或 application/xhtml+xml)以及代理数据起作用。您可以通过设置 PROXY_HTML_FORCE 环境变量来覆盖此行为(后果自负)。

top

ProxyHTMLEvents 指令

描述指定要视为脚本事件的属性。
语法ProxyHTMLEvents attribute [attribute ...]
上下文服务器配置、虚拟主机、目录
状态基础
模块mod_proxy_html
兼容性版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用

指定一个或多个要视为脚本事件的属性,并在启用时对它们应用 ProxyHTMLURLMap。您可以在一个或多个 ProxyHTMLEvents 指令中指定任意数量的属性。

通常,您将在全局范围内设置此选项。如果您在多个范围内设置 ProxyHTMLEvents,以便一个覆盖另一个,则需要在每个范围内指定一个完整的集合。

默认配置在 proxy-html.conf 中提供,并定义了标准 HTML 4 和 XHTML 1 中的事件。

top

ProxyHTMLExtended 指令

描述确定是否修复内联脚本、样式表和脚本事件中的链接。
语法ProxyHTMLExtended On|Off
默认值ProxyHTMLExtended Off
上下文服务器配置、虚拟主机、目录
状态基础
模块mod_proxy_html
兼容性版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用

设置为 Off 时,HTML 链接将根据 ProxyHTMLURLMap 指令进行重写,但出现在 Javascript 和 CSS 中的链接将被忽略。

设置为 On 时,所有脚本事件(由 ProxyHTMLEvents 确定)以及嵌入的脚本或样式表也将根据为每个规则设置的标志,由 ProxyHTMLURLMap 规则处理。由于这需要更多解析,因此如果您仅在严格必要时启用它,性能将最佳。

您还需要注意匹配的模式,因为解析器不知道嵌入脚本或样式表中的内容是什么。特别是,对 / 的扩展匹配可能会导致错误匹配。

top

ProxyHTMLFixups 指令

描述修复简单的 HTML 错误。
语法ProxyHTMLFixups [lowercase] [dospath] [reset]
上下文服务器配置、虚拟主机、目录
状态基础
模块mod_proxy_html
兼容性版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用

此指令接受一个到三个参数,如下所示

使用这些选项时要小心。修复将纠正某些创作错误,但也有可能错误地修复最初正确的链接。仅当您知道您的后端服务器存在问题时才使用它们。

top

ProxyHTMLInterp 指令

描述启用 ProxyHTMLURLMap 规则的每个请求插值。
语法ProxyHTMLInterp On|Off
默认值ProxyHTMLInterp Off
上下文服务器配置、虚拟主机、目录
状态基础
模块mod_proxy_html
兼容性版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用

这将在 ProxyHTMLURLMap 的 to- 和 from- 模式中启用每个请求插值。

如果未启用插值,则所有规则将在启动时预编译。使用插值时,必须为每个请求重新编译它们,这意味着额外的处理开销。因此,应仅在必要时启用它。

top

ProxyHTMLLinks 指令

描述指定具有要重写的 URL 属性的 HTML 元素。
语法ProxyHTMLLinks element attribute [attribute2 ...]
上下文服务器配置、虚拟主机、目录
状态基础
模块mod_proxy_html
兼容性版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用

指定具有 URL 属性的元素,这些属性应使用标准 ProxyHTMLURLMap 进行重写。每个元素需要一个 ProxyHTMLLinks 指令,但它可以具有任意数量的属性。

通常,您将在全局范围内设置此选项。如果您在多个范围内设置 ProxyHTMLLinks,以便一个覆盖另一个,则需要在每个范围内指定一个完整的集合。

默认配置在 proxy-html.conf 中提供,并定义了标准 HTML 4 和 XHTML 1 中的 HTML 链接。

来自 proxy-html.conf 的示例

ProxyHTMLLinks  a          href
ProxyHTMLLinks  area       href
ProxyHTMLLinks  link       href
ProxyHTMLLinks  img        src longdesc usemap
ProxyHTMLLinks  object     classid codebase data usemap
ProxyHTMLLinks  q          cite
ProxyHTMLLinks  blockquote cite
ProxyHTMLLinks  ins        cite
ProxyHTMLLinks  del        cite
ProxyHTMLLinks  form       action
ProxyHTMLLinks  input      src usemap
ProxyHTMLLinks  head       profile
ProxyHTMLLinks  base       href
ProxyHTMLLinks  script     src for
top

ProxyHTMLMeta 指令

描述启用或禁用对 HTML <head> 部分中元数据的额外预解析。
语法ProxyHTMLMeta On|Off
默认值ProxyHTMLMeta Off
上下文服务器配置、虚拟主机、目录
状态基础
模块mod_proxy_html
兼容性版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用。

这将启用或禁用对 HTML <head> 部分中元数据的预解析。

如果不需要,将 ProxyHTMLMeta 设置为 Off 将通过跳过此解析步骤来提高性能。但是,有时为了使国际化正常工作,这是必要的。

ProxyHTMLMeta 有两个作用。首先也是最重要的是,它能够检测以以下形式声明的字符编码

<meta http-equiv="Content-Type" content="text/html;charset=foo">

或者,对于 XHTML 文档,是 XML 声明。如果字符集在来自后端服务器的真实 HTTP 标头(始终优先)中声明,或者如果文档是 utf-8(unicode)或 ASCII 等子集,则不需要它。您也可以在文档使用使用 xml2EncDefault 声明的默认值时省略它,但这有传播不正确声明的风险。一个 ProxyHTMLCharsetOut 可以消除这种风险,但它可能比启用 ProxyHTMLMeta 带来更大的处理开销。

启用 ProxyHTMLMeta 的另一个作用是解析所有 <meta http-equiv=...> 声明并将它们转换为真实的 HTTP 标头,以符合这种形式的 HTML <meta> 元素的最初目的。

警告

因为 ProxyHTMLMeta 将所有 http-equiv 元素提升为 HTTP 标头,所以您必须仅在您信任 HTML 内容与您信任上游服务器一样的情况下启用它。如果 HTML 受恶意行为者的控制,他们将能够将任意(可能恶意)HTTP 标头注入到您服务器的响应中。
top

ProxyHTMLStripComments 指令

描述确定是否剥离 HTML 注释。
语法ProxyHTMLStripComments On|Off
默认值ProxyHTMLStripComments Off
上下文服务器配置、虚拟主机、目录
状态基础
模块mod_proxy_html
兼容性版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用

此指令将导致 mod_proxy_html 剥离 HTML 注释。请注意,这也会删除嵌入在注释中的任何脚本或样式(1995/6 年在 Netscape 2 中引入的错误,为了当时较旧的浏览器的利益,但今天仍在使用)。它也可能干扰基于注释的处理器,例如 SSI 或 ESI:如果剥离注释,请确保在过滤器链中运行任何这些处理器 mod_proxy_html 之前!

top

ProxyHTMLURLMap 指令

描述定义一个规则来重写 HTML 链接
语法ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]
上下文服务器配置、虚拟主机、目录
状态基础
模块mod_proxy_html
兼容性版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用。

这是重写 HTML 链接的关键指令。在解析文档时,只要链接目标匹配 from-pattern,匹配的部分将被重写为 to-pattern,并根据提供的任何标志以及 ProxyHTMLExtended 指令进行修改。只有使用 ProxyHTMLLinks 指令指定的元素才会被视为 HTML 链接。

可选的第三个参数可以定义以下任何标志。标志区分大小写。

h

忽略 HTML 链接(保持不变)

e

忽略脚本事件(保持不变)

c

将嵌入的脚本和样式部分保持原样。

L

最后匹配。如果此规则匹配,则不再应用其他规则(请注意,这对于 HTML 链接会自动发生)。

l

与 L 相反。使用 HTML 链接覆盖一次更改的默认行为。

R

使用正则表达式匹配和替换。from-pattern 是一个正则表达式,to-pattern 是一个替换字符串,它可能基于正则表达式。支持正则表达式内存:您可以在 from-pattern 中使用括号 () 并使用 to-pattern 中的 $1 到 $9 检索匹配项。

如果未设置 R,它将使用字符串文字搜索和替换。逻辑是 HTML 链接中的以...开头,但脚本事件和嵌入的脚本和样式部分中的包含

x

使用 POSIX 扩展正则表达式。仅适用于 R。

i

不区分大小写的匹配。仅适用于 R。

n

禁用正则表达式内存(为了速度)。仅适用于 R。

s

基于行的正则表达式匹配。仅适用于 R。

^

仅在开头匹配。这仅适用于字符串匹配(而不是正则表达式),与 HTML 链接无关。

$

仅在结尾匹配。这仅适用于字符串匹配(而不是正则表达式),与 HTML 链接无关。

V

to-pattern 中插入环境变量。形式为 ${varname|default} 的字符串将被环境变量 varname 的值替换。如果未设置,则将其替换为 default|default 是可选的。

注意:只有当 ProxyHTMLInterpOn 时,才会启用插值。

v

from-pattern 中插入环境变量。支持的模式与上面相同。

注意:只有当 ProxyHTMLInterpOn 时,才会启用插值。

可选的第四个cond 参数定义了一个条件,该条件将在每个请求中进行评估,前提是 ProxyHTMLInterpOn。如果条件评估为 FALSE,则地图不会在此请求中应用。如果为 TRUE,或者未定义条件,则应用地图。

cond表达式解析器 评估。此外,还支持 mod_proxy_html 3.x 中针对 HTTPD 2.0 和 2.2 的更简单的条件语法。

可用语言:  en  |  fr 

top

评论

注意
这不是一个问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果它们被实施或被认为无效/主题外,可能会被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应直接发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表