Apache HTTP Server 2.4 版
說明 | 改寫 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 開發,其詳細的 文件 對使用者非常有幫助。
說明 | 設定用於內嵌指令碼和樣式表的緩衝區大小增量。 |
---|---|
語法 | 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
,文件將會宣告為「過渡性」,如果您正在代理 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 屬性 [屬性 ...] |
環境 | 伺服器設定、虛擬主機、目錄 |
狀態 | 基本 |
模組 | 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
規則處理。由於這需要更多解析,因此只有在絕對需要時才啟用會達到最好的效能。
您也需要謹慎處理比對到的模式,因為解析器無法辨識出內嵌指令碼或樣式表中的 URL 為何。特別是,擴充比對 /
很可能會導致錯誤比對。
說明 | 針對簡單的 HTML 錯誤進行修復。 |
---|---|
語法 | ProxyHTMLFixups [小寫] [dospath] [重設] |
環境 | 伺服器設定、虛擬主機、目錄 |
狀態 | 基本 |
模組 | mod_proxy_html |
相容性 | 版本 2.4 及更新版本;提供給先前的 2.x 版本作為第三方模組 |
此指令可以接受至三個參數,如下所示:
lowercase
將網址重寫成小寫dospath
將網址中的反斜線重寫成正斜線。reset
清除設定中較高層級的任何選項。使用這些選項時請小心。這些修正可以更正某些建立錯誤,但也有可能錯誤地修正原本正確的連結。只有當您知道有一台故障的後端伺服器時,才使用它們。
說明 | 啟用對 ProxyHTMLURLMap 規則的每個要求內插。 |
---|---|
語法 | ProxyHTMLInterp On|Off |
預設值 | ProxyHTMLInterp Off |
環境 | 伺服器設定、虛擬主機、目錄 |
狀態 | 基本 |
模組 | mod_proxy_html |
相容性 | 版本 2.4 及更新版本;較早期的 2.x 版本可當作第三方模組使用 |
這會啟用對ProxyHTMLURLMap
的每個要求內插中的樣式。
如果未啟用內插,所有規則都會在啟動時預先編譯。在內插時,必須為每個要求重新編譯,因此會產生額外的處理負載。因此,只有必要時才啟用。
說明 | 指定具有要重寫的網址屬性的 HTML 元素。 |
---|---|
語法 | ProxyHTMLLinks 元素屬性 [屬性2 ...] |
環境 | 伺服器設定、虛擬主機、目錄 |
狀態 | 基本 |
模組 | mod_proxy_html |
相容性 | 版本 2.4 及更新版本;提供給先前的 2.x 版本作為第三方模組 |
指定具有要使用標準 ProxyHTMLURLMap
s 重寫的網址屬性的元素。您需要對每個元素提供一個 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 會略過此分析步驟,以提升一點效能。然而,有時則需要啟用才能正確執行國際化。
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
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 起始樣式 終點樣式 [旗標] [條件] |
環境 | 伺服器設定、虛擬主機、目錄 |
狀態 | 基本 |
模組 | mod_proxy_html |
相容性 | 版本 2.4 及更新版本;昔の 2.x 版本可透過第三方模組取得。 |
這是一個重新寫入 HTML 連結的主要指令。在剖析文件時,只要連結目標符合 起始樣式,符合部分就會重新寫入為 終點樣式,並經過任何提供的旗標和 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
為 開啟 時,才會啟用插入。
在 from-pattern
中插入環境變數。支援的格式如上所述。
請注意:僅當 ProxyHTMLInterp
為 開啟 時,才會啟用插入。
第四個選用引數 cond 定義一個條件,該條件會針對每個 Request 評估,前提是 ProxyHTMLInterp
為 開啟。如果條件評估結果為 FALSE,則在本次要求中不會套用映射。如果為 TRUE,或未定義條件,則會套用映射。
cond 由 表示式剖析器 評估。此外,也支援 mod_proxy_html 3.x 中針對 HTTPD 2.0 和 2.2 所定義的條件簡化語法。