<-
Apache > HTTP Server > 文件 > 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,而且此伺服器僅限於公司內部網路的人員使用,並有一部公開的網路伺服器 www.example.com,他們可能會想提供一個閘道至 http://www.example.com/appserver/ 中的應用程式伺服器。當應用程式伺服器連結到自身時,這些連結必須改寫才能透過閘道運作。<a href="http://appserver.example.com/foo/bar.html">foobar</a> 經由 mod_proxy_html 改寫為 <a href="http://www.example.com/appserver/foo/bar.html">foobar</a>,才能讓外部人員存取。

mod_proxy_html 最初由 WebÞing 開發,其詳細的 文件 對使用者非常有幫助。

Support Apache!

指令

Bugfix 清單

另見

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,文件將會宣告為「過渡性」,如果您正在代理 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 屬性 [屬性 ...]
環境伺服器設定、虛擬主機、目錄
狀態基本
模組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 規則處理。由於這需要更多解析,因此只有在絕對需要時才啟用會達到最好的效能。

您也需要謹慎處理比對到的模式,因為解析器無法辨識出內嵌指令碼或樣式表中的 URL 為何。特別是,擴充比對 / 很可能會導致錯誤比對。

top

ProxyHTMLFixups 指令

說明針對簡單的 HTML 錯誤進行修復。
語法ProxyHTMLFixups [小寫] [dospath] [重設]
環境伺服器設定、虛擬主機、目錄
狀態基本
模組mod_proxy_html
相容性版本 2.4 及更新版本;提供給先前的 2.x 版本作為第三方模組

此指令可以接受至三個參數,如下所示:

使用這些選項時請小心。這些修正可以更正某些建立錯誤,但也有可能錯誤地修正原本正確的連結。只有當您知道有一台故障的後端伺服器時,才使用它們。

top

ProxyHTMLInterp 指令

說明啟用對 ProxyHTMLURLMap 規則的每個要求內插。
語法ProxyHTMLInterp On|Off
預設值ProxyHTMLInterp Off
環境伺服器設定、虛擬主機、目錄
狀態基本
模組mod_proxy_html
相容性版本 2.4 及更新版本;較早期的 2.x 版本可當作第三方模組使用

這會啟用對ProxyHTMLURLMap 的每個要求內插中的樣式。

如果未啟用內插,所有規則都會在啟動時預先編譯。在內插時,必須為每個要求重新編譯,因此會產生額外的處理負載。因此,只有必要時才啟用。

top

ProxyHTMLLinks 指令

說明指定具有要重寫的網址屬性的 HTML 元素。
語法ProxyHTMLLinks 元素屬性 [屬性2 ...]
環境伺服器設定、虛擬主機、目錄
狀態基本
模組mod_proxy_html
相容性版本 2.4 及更新版本;提供給先前的 2.x 版本作為第三方模組

指定具有要使用標準 ProxyHTMLURLMaps 重寫的網址屬性的元素。您需要對每個元素提供一個 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 會略過此分析步驟,以提升一點效能。然而,有時則需要啟用才能正確執行國際化。

ProxyHTMLMeta 有兩個作用。首要也是最重要的,它可以偵測以表單宣告的字元編碼

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

或,在 XHTML 文件中,選擇 XML 聲明。如果 charsets 在後端伺服器的真實 HTTP 標頭(總是較優先)中聲明,或文件為 utf-8 (unicode)或像 ASCII 這樣的子集,則不需要它。您也可以在文件使用 xml2EncDefault 聲明的預設值時省略它,但這會造成傳遞錯誤的聲明。 ProxyHTMLCharsetOut 可以消除風險,但處理負擔可能會比啟用 ProxyHTMLMeta 還要大。

啟用 ProxyHTMLMeta 的另一個效果是剖析所有 <meta http-equiv=...> 聲明,並將其轉換成真實的 HTTP 標頭,以符合 HTML

警告

由於 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 起始樣式 終點樣式 [旗標] [條件]
環境伺服器設定、虛擬主機、目錄
狀態基本
模組mod_proxy_html
相容性版本 2.4 及更新版本;昔の 2.x 版本可透過第三方模組取得。

這是一個重新寫入 HTML 連結的主要指令。在剖析文件時,只要連結目標符合 起始樣式,符合部分就會重新寫入為 終點樣式,並經過任何提供的旗標和 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 為選用項目。

請注意:僅當 ProxyHTMLInterp開啟 時,才會啟用插入。

v

from-pattern 中插入環境變數。支援的格式如上所述。

請注意:僅當 ProxyHTMLInterp開啟 時,才會啟用插入。

第四個選用引數 cond 定義一個條件,該條件會針對每個 Request 評估,前提是 ProxyHTMLInterp開啟。如果條件評估結果為 FALSE,則在本次要求中不會套用映射。如果為 TRUE,或未定義條件,則會套用映射。

cond表示式剖析器 評估。此外,也支援 mod_proxy_html 3.x 中針對 HTTPD 2.0 和 2.2 所定義的條件簡化語法。

可用語言:  en  |  fr 

top

評論

注意
這裡不是問與答區。張貼於此的留言應針對改善文件或伺服器的建議,而我們的管理員可能會移除已實作的留言或被視為無效/離題的留言。有關如何管理 Apache HTTP 伺服器問題,請洽詢我們的 IRC 頻道 #httpd (位於 Libera.chat),或將您的問題寄到我們的 郵寄清單