Apache HTTP Server 版本 2.4
描述 | 重写 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 开发,其广泛的 文档 可能对用户有用。
描述 | 设置用于缓冲内联脚本和样式表的缓冲区大小增量。 |
---|---|
语法 | ProxyHTMLBufSize bytes |
默认值 | ProxyHTMLBufSize 8192 |
上下文 | 服务器配置、虚拟主机、目录 |
状态 | 基础 |
模块 | mod_proxy_html |
兼容性 | 版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用 |
为了解析嵌入在 HTML 文档中的非 HTML 内容(样式表和脚本),mod_proxy_html
必须将整个脚本或样式表读入缓冲区。此缓冲区将根据需要扩展,以增量方式容纳页面中最大的脚本或样式表,增量由此指令设置的 bytes 决定。
默认值为 8192,对于几乎所有页面都适用。但是,如果您知道您正在代理包含大于 8K 的样式表和/或脚本的页面(即,对于单个脚本或样式表,而不是总计),则设置更大的缓冲区大小将更有效,并且可以避免在请求期间动态调整缓冲区大小的需要。
描述 | 为 mod_proxy_html 输出指定字符集。 |
---|---|
语法 | ProxyHTMLCharsetOut Charset | * |
上下文 | 服务器配置、虚拟主机、目录 |
状态 | 基础 |
模块 | mod_proxy_html |
兼容性 | 版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用 |
这将选择 mod_proxy_html 输出的编码。通常不应使用它,因为任何与默认 UTF-8
(Unicode - libxml2 内部使用)的更改都会带来额外的处理开销。特殊标记 ProxyHTMLCharsetOut *
将使用与输入相同的编码生成输出。
请注意,这依赖于 mod_xml2enc
已加载。
描述 | 设置 HTML 或 XHTML 文档类型声明。 |
---|---|
语法 | ProxyHTMLDocType HTML|XHTML [Legacy] |
上下文 | 服务器配置、虚拟主机、目录 |
状态 | 基础 |
模块 | 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 级别记录其他错误。
描述 | 打开或关闭 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 环境变量来覆盖此行为(后果自负)。
描述 | 指定要视为脚本事件的属性。 |
---|---|
语法 | ProxyHTMLEvents attribute [attribute ...] |
上下文 | 服务器配置、虚拟主机、目录 |
状态 | 基础 |
模块 | mod_proxy_html |
兼容性 | 版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用 |
指定一个或多个要视为脚本事件的属性,并在启用时对它们应用 ProxyHTMLURLMap
。您可以在一个或多个 ProxyHTMLEvents
指令中指定任意数量的属性。
通常,您将在全局范围内设置此选项。如果您在多个范围内设置 ProxyHTMLEvents
,以便一个覆盖另一个,则需要在每个范围内指定一个完整的集合。
默认配置在 proxy-html.conf 中提供,并定义了标准 HTML 4 和 XHTML 1 中的事件。
描述 | 确定是否修复内联脚本、样式表和脚本事件中的链接。 |
---|---|
语法 | ProxyHTMLExtended On|Off |
默认值 | ProxyHTMLExtended Off |
上下文 | 服务器配置、虚拟主机、目录 |
状态 | 基础 |
模块 | mod_proxy_html |
兼容性 | 版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用 |
设置为 Off
时,HTML 链接将根据 ProxyHTMLURLMap
指令进行重写,但出现在 Javascript 和 CSS 中的链接将被忽略。
设置为 On
时,所有脚本事件(由 ProxyHTMLEvents
确定)以及嵌入的脚本或样式表也将根据为每个规则设置的标志,由 ProxyHTMLURLMap
规则处理。由于这需要更多解析,因此如果您仅在严格必要时启用它,性能将最佳。
您还需要注意匹配的模式,因为解析器不知道嵌入脚本或样式表中的内容是什么。特别是,对 /
的扩展匹配可能会导致错误匹配。
描述 | 修复简单的 HTML 错误。 |
---|---|
语法 | ProxyHTMLFixups [lowercase] [dospath] [reset] |
上下文 | 服务器配置、虚拟主机、目录 |
状态 | 基础 |
模块 | mod_proxy_html |
兼容性 | 版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用 |
此指令接受一个到三个参数,如下所示
lowercase
Url 将被重写为小写dospath
Url 中的反斜杠将被重写为正斜杠。reset
取消在配置中更高级别设置的任何选项。使用这些选项时要小心。修复将纠正某些创作错误,但也有可能错误地修复最初正确的链接。仅当您知道您的后端服务器存在问题时才使用它们。
描述 | 启用 ProxyHTMLURLMap 规则的每个请求插值。 |
---|---|
语法 | ProxyHTMLInterp On|Off |
默认值 | ProxyHTMLInterp Off |
上下文 | 服务器配置、虚拟主机、目录 |
状态 | 基础 |
模块 | mod_proxy_html |
兼容性 | 版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用 |
这将在 ProxyHTMLURLMap
的 to- 和 from- 模式中启用每个请求插值。
如果未启用插值,则所有规则将在启动时预编译。使用插值时,必须为每个请求重新编译它们,这意味着额外的处理开销。因此,应仅在必要时启用它。
描述 | 指定具有要重写的 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 链接。
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
描述 | 启用或禁用对 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> 元素的最初目的。
http-equiv
元素提升为 HTTP 标头,所以您必须仅在您信任 HTML 内容与您信任上游服务器一样的情况下启用它。如果 HTML 受恶意行为者的控制,他们将能够将任意(可能恶意)HTTP 标头注入到您服务器的响应中。描述 | 确定是否剥离 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 之前!
描述 | 定义一个规则来重写 HTML 链接 |
---|---|
语法 | ProxyHTMLURLMap from-pattern to-pattern [flags] [cond] |
上下文 | 服务器配置、虚拟主机、目录 |
状态 | 基础 |
模块 | mod_proxy_html |
兼容性 | 版本 2.4 及更高版本;对于早期 2.x 版本,可作为第三方模块使用。 |
这是重写 HTML 链接的关键指令。在解析文档时,只要链接目标匹配 from-pattern,匹配的部分将被重写为 to-pattern,并根据提供的任何标志以及 ProxyHTMLExtended
指令进行修改。只有使用 ProxyHTMLLinks
指令指定的元素才会被视为 HTML 链接。
可选的第三个参数可以定义以下任何标志。标志区分大小写。
忽略 HTML 链接(保持不变)
忽略脚本事件(保持不变)
将嵌入的脚本和样式部分保持原样。
最后匹配。如果此规则匹配,则不再应用其他规则(请注意,这对于 HTML 链接会自动发生)。
与 L 相反。使用 HTML 链接覆盖一次更改的默认行为。
使用正则表达式匹配和替换。from-pattern
是一个正则表达式,to-pattern
是一个替换字符串,它可能基于正则表达式。支持正则表达式内存:您可以在 from-pattern
中使用括号 () 并使用 to-pattern
中的 $1 到 $9 检索匹配项。
如果未设置 R,它将使用字符串文字搜索和替换。逻辑是 HTML 链接中的以...开头,但脚本事件和嵌入的脚本和样式部分中的包含。
使用 POSIX 扩展正则表达式。仅适用于 R。
不区分大小写的匹配。仅适用于 R。
禁用正则表达式内存(为了速度)。仅适用于 R。
基于行的正则表达式匹配。仅适用于 R。
仅在开头匹配。这仅适用于字符串匹配(而不是正则表达式),与 HTML 链接无关。
仅在结尾匹配。这仅适用于字符串匹配(而不是正则表达式),与 HTML 链接无关。
在 to-pattern
中插入环境变量。形式为 ${varname|default}
的字符串将被环境变量 varname
的值替换。如果未设置,则将其替换为 default
。|default
是可选的。
注意:只有当 ProxyHTMLInterp
为 On 时,才会启用插值。
在 from-pattern
中插入环境变量。支持的模式与上面相同。
注意:只有当 ProxyHTMLInterp
为 On 时,才会启用插值。
可选的第四个cond 参数定义了一个条件,该条件将在每个请求中进行评估,前提是 ProxyHTMLInterp
为 On。如果条件评估为 FALSE,则地图不会在此请求中应用。如果为 TRUE,或者未定义条件,则应用地图。
cond 由 表达式解析器 评估。此外,还支持 mod_proxy_html 3.x 中针对 HTTPD 2.0 和 2.2 的更简单的条件语法。