mod_proxy_html
描述: | 重写 HTML 链接以确保它们可以在代理 context 中从 Clients 的网络中寻址。 |
状态: | Base |
模块标识符: | proxy_html_module |
源文件: | mod_proxy_html.c |
兼容性: | Version 2.4 以及之后。可用作早期 2.x 版本的 third-party 模块 |
摘要
此模块提供输出过滤器以在代理情况下 rewrite HTML 链接,以确保链接适用于代理外部的用户。它的作用与 Apache 的ProxyPassReverse指令对 HTTP headers 的作用相同,并且是反向代理的必要组件。
例如,如果公司在appserver.example.com
处有一个只在公司内部网络中可见的 application 服务器和一个公共网络服务器www.example.com
,他们可能希望在http://www.example.com/appserver/
处为 application 服务器提供一个网关。当 application 服务器链接到自身时,需要重写这些链接以通过网关工作。mod_proxy_html用于_rew到<a href="http://www.example.com/appserver/foo/bar.html">foobar</a>
使其可以从外部访问。
mod_proxy_html 最初是在 WebÞing 开发的,其广泛的文件可能对用户有用。
ProxyHTMLBufSize 指令
描述: | 设置缓冲区大小增量以缓冲内联脚本和样式表。 |
句法: | ProxyHTMLBufSize bytes |
默认: | ProxyHTMLBufSize 8192 |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_proxy_html |
兼容性: | Version 2.4 及以后;可用作早期 2.x 版本的 third-party |
在 order 中解析嵌入在 HTML 文档中的 non-HTML 内容(样式表和脚本),mod_proxy_html必须将整个脚本或样式表读入缓冲区。此缓冲区将根据需要进行扩展,以按照此指令设置的字节数增量保存页面中最大的脚本或样式表。
默认值为 8192,几乎适用于所有页面。但是,如果您知道您正在代理包含大于 8K 的样式表 and/or 脚本的页面(即,对于单个脚本或样式表,而不是总计),则设置更大的缓冲区大小并避免调整大小的效率会更高效请求期间动态缓冲区。
ProxyHTMLCharsetOut 指令
描述: | 为 mod_proxy_html 输出指定字符集。 |
句法: | ProxyHTMLCharsetOut Charset \|* |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_proxy_html |
兼容性: | Version 2.4 及以后;可用作早期 2.x 版本的 third-party |
这将选择 mod_proxy_html 输出的编码。它通常不应该使用,因为默认UTF-8
(Unicode -由 libxml2 内部使用)的任何更改都会产生额外的处理开销。特殊标记ProxyHTMLCharsetOut *
将使用与输入相同的编码生成输出。
请注意,这依赖于mod_xml2enc被加载。
ProxyHTMLDocType 指令
描述: | 设置 HTML 或 XHTML 文档类型声明。 |
句法: | ProxyHTMLDocType HTML\|XHTML[Legacy] OR ProxyHTMLDocType fpi[SGML\|XML] |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_proxy_html |
兼容性: | Version 2.4 及以后;可用作早期 2.x 版本的 third-party |
在第一种形式中,根据所选的选项,文档将被声明为 HTML 4.01 或 XHTML 1.0.此选项还确定 HTML 或 XHTML 语法是否用于输出。请注意,来自后端服务器的文档格式并不重要:解析器将自动处理它。如果可选的第二个参数设置为Legacy
,则文档将被声明为“Transitional”,如果您代理 pre-1998 内容或使用有缺陷的 authoring/publishing 工具,则可能需要该选项。
在第二种形式中,它将插入您自己的 FPI。可选的第二个参数确定是否使用 SGML/HTML 或 XML/XHTML 语法。
默认值被更改为省略任何 FPI,理由是没有 FPI 优于伪造的 FPI。如果您的后端生成了不错的 HTML 或 XHTML,请相应地进行设置。
如果使用第一个表单,mod_proxy_html 也会将 HTML 清理为指定的标准。它无法修复每个错误,但它会删除伪造的元素和属性。它还可以选择在LogLevel Debug 中 log 其他错误。
ProxyHTMLEnable 指令
描述: | 打开或关闭 proxy_html 过滤器。 |
句法: | ProxyHTMLEnable On\|Off |
默认: | ProxyHTMLEnable Off |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_proxy_html |
兼容性: | Version 2.4 及以后;可用作早期 2.x 版本的 third-party 模块。 |
一个简单的开关,用于启用或禁用 proxy_html 过滤器。如果加载mod_xml2enc,它还将自动设置国际化支持。
请注意,proxy_html 过滤器仅对 HTML 数据(Content-Type text/html 或 application/xhtml xml)以及代理数据时起作用。您可以通过设置 PROXY_HTML_FORCE 环境变量来覆盖此设置(风险自负)。
ProxyHTMLEvents 指令
描述: | 指定要作为脚本 events 处理的属性。 |
句法: | ProxyHTMLEvents attribute[attribute ...] |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_proxy_html |
兼容性: | Version 2.4 及以后;可用作早期 2.x 版本的 third-party |
指定一个或多个要作为脚本 events 处理的属性,并将ProxyHTMLURLMap s 应用于启用的位置。您可以在一个或多个ProxyHTMLEvents
指令中指定任意数量的属性。
通常你会全局设置它。如果在多个范围中设置ProxyHTMLEvents
以使一个覆盖另一个范围,则需要在每个范围中指定一个完整的集合。
proxy-html.conf 中提供了默认的 configuration,并在标准 HTML 4 和 XHTML 1 中定义 events。
ProxyHTMLExtended 指令
描述: | 确定是否修复内联脚本,样式表和脚本 events 中的链接。 |
句法: | ProxyHTMLExtended On\|Off |
默认: | ProxyHTMLExtended Off |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_proxy_html |
兼容性: | Version 2.4 及以后;可用作早期 2.x 版本的 third-party |
设置为Off
,根据ProxyHTMLURLMap指令重写 HTML 链接,但忽略 Javascript 和 CSS 中出现的链接。
设置为On
,根据为每个规则设置的标志,所有脚本 events(由ProxyHTMLEvents确定)和嵌入的脚本或样式表也由ProxyHTMLURLMap规则处理。由于这需要更多解析,如果您只在必要时启用它,则性能最佳。
您还需要注意匹配的模式,因为解析器不知道嵌入式脚本或样式表中的 URL 是什么。特别是,/
的扩展匹配可能导致 false 匹配。
ProxyHTMLFixups 指令
描述: | 修复了简单的 HTML 错误。 |
句法: | ProxyHTMLFixups[lowercase][dospath][reset] |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_proxy_html |
兼容性: | Version 2.4 及以后;可用作早期 2.x 版本的 third-party |
该指令需要一到三个 arguments,如下所示:
lowercase
Urls 被重写为小写dospath
URL 中的反斜杠被重写为正斜杠。reset
取消设置 configuration 中更高 level 设置的任何选项。
使用这些时要小心。修复程序将纠正某些创作错误,但风险也错误地修复了正确的链接。如果您知道后端服务器损坏,请仅使用它们。
ProxyHTMLInterp 指令
描述: | 启用ProxyHTMLURLMap 规则的 per-request 插值。 |
句法: | ProxyHTMLInterp On\|Off |
默认: | ProxyHTMLInterp Off |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_proxy_html |
兼容性: | Version 2.4 及以后;可用作早期 2.x 版本的 third-party 模块 |
这样可以在ProxyHTMLURLMap到-和-模式中进行 per-request 插值。
如果未启用插值,则启动时所有规则均为 pre-compiled。通过插值,每个请求必须为 re-compiled,这意味着额外的处理开销。因此,只有在必要时才应启用它。
ProxyHTMLLinks 指令
描述: | 指定具有要重写的 URL 属性的 HTML 元素。 |
句法: | ProxyHTMLLinks element attribute[attribute2 ...] |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_proxy_html |
兼容性: | Version 2.4 及以后;可用作早期 2.x 版本的 third-party |
指定具有应使用标准ProxyHTMLURLMap s 重写的 URL 属性的元素。每个元素需要一个ProxyHTMLLinks
指令,但它可以包含任意数量的属性。
通常你会全局设置它。如果在多个范围中设置ProxyHTMLLinks
以使一个覆盖另一个范围,则需要在每个范围中指定一个完整的集合。
proxy-html.conf 中提供了默认的 configuration,并定义了标准 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
ProxyHTMLMeta 指令
描述: | 打开或关闭 HTML <head> 部分中额外的 pre-parsing 元数据。 |
句法: | ProxyHTMLMeta On\|Off |
默认: | ProxyHTMLMeta Off |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_proxy_html |
兼容性: | Version 2.4 及以后;可用作早期 2.x 版本的 third-party 模块。 |
这将打开或关闭 HTML <head>
部分中的 pre-parsing 元数据。
如果不需要,将 ProxyHTMLMeta 关闭将通过跳过此解析 step 来提供小的 performance 提升。但是,国际化有时需要正常运作。
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 headers,以符合此形式的 HTML <meta>元素的原始目的。
警告
因为 ProxyHTMLMeta 将所有**http-equiv
元素提升为 HTTP headers,所以只有在您信任 HTML 内容的情况下才能启用它,这一点与您信任上游服务器一样重要。如果 HTML 由坏人控制,那么他们就有可能将任意的,可能是恶意的 HTTP headers 注入到服务器的响应中。
ProxyHTMLStripComments 指令
描述: | 确定是否删除 HTML comments。 |
句法: | ProxyHTMLStripComments On\|Off |
默认: | ProxyHTMLStripComments Off |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_proxy_html |
兼容性: | Version 2.4 及以后;可用作早期 2.x 版本的 third-party |
该指令将导致 mod_proxy_html 剥离 HTML comments。请注意,这也会消除 comments 中嵌入的任何脚本或样式(为了 then-older 浏览器的利益,在 1995/6 中引入了一个 betsh,但仍然在使用)。它也可能会干扰 comment-based 处理器,例如 SSI 或 ESI:如果剥离 comments,请务必在过滤器链中之前运行任何处理器!
ProxyHTMLURLMap 指令
描述: | 定义用于 rewrite HTML 链接的规则 |
句法: | ProxyHTMLURLMap from-pattern to-pattern[flags][cond] |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_proxy_html |
兼容性: | Version 2.4 及以后;可用作早期 2.x 版本的 third-party 模块。 |
这是用于重写 HTML 链接的 key 指令。解析文档时,只要链接目标与 from-pattern 匹配,匹配部分将被重写为 to-pattern,由提供的任何标志和ProxyHTMLExtended指令修改。只有使用ProxyHTMLLinks指令指定的元素才会被视为 HTML 链接。
可选的第三个参数可以定义以下任何标志。标志是 case-sensitive。
- H
忽略 HTML 链接(传递不变) - Ë
忽略脚本 events(传递不变) - C
通过不变的方式传递嵌入式脚本和样式部分。 - 大号
Last-match。如果此规则匹配,则不再应用任何规则(请注意,这会自动发生在 HTML 链接中)。 - 升
与 L.相反使用 HTML 链接覆盖 one-change-only 默认行为。 - [R
使用正则表达式 matching-and-replace。 from-pattern 是正则表达式,而 to-pattern 是可以基于正则表达式的替换 string。支持 Regexp memory:您可以在 from-pattern 中使用方括号()并在 to-pattern 中检索$1 到$9 的匹配项。如果未设置 R,则使用 string-literal search-and-replace。逻辑在 HTML 链接中是 starts-with,但包含脚本 events 和嵌入式脚本和样式部分。 - X
使用 POSIX 扩展正则表达式。仅适用于 R. - 一世
Case-insensitive 匹配。仅适用于 R. - ñ
禁用 regexp memory(速度)。仅适用于 R. - 小号
Line-based 正则表达式匹配。仅适用于 R. - ^
Match 仅在开始时。这仅适用于 string 匹配(不是 regexps),与 HTML 链接无关。 - $
Match 仅限结束。这仅适用于 string 匹配(不是 regexps),与 HTML 链接无关。 - V
在 to-pattern 中插入环境变量。形式为${varname | default}的 string 将替换为环境变量 varname 的 value。如果未设置,则默认替换它。|默认是可选的。注意:只有在 ProxyHTMLInterp 为 On 时才会启用插值。 - v
在 from-pattern 中插入环境变量。支持的模式如上所述。注意:只有在 ProxyHTMLInterp 为 On 时才会启用插值。
可选的第四个cond参数定义了一个条件,该条件将根据请求进行评估,前提是ProxyHTMLInterp为 On。如果条件评估 FALSE,则不会在此请求中应用 map。如果 TRUE,或者未定义条件,则应用 map。
A cond由表达解析器评估。此外,还支持 HTTPD 2.0 和 2.2 的 mod_proxy_html 3.x 中更简单的条件语法。