對於第 7 層虛擬伺服器,您可以選擇性地設定負載平衡器規則,並使用比對或動作規則自訂負載平衡行為。
對於比對類型,負載平衡器規則支援 REGEX。支援 PCRE 樣式 REGEX 模式,但對進階使用案例存在一些限制。在比對條件中使用 REGEX 時,支援具名擷取群組。
REGEX 限制包括:- 不支援字元聯集和交集。例如,請勿使用 [a-z[0-9]] 和 [a-z&&[aeiou]],分別改為使用 [a-z0-9] 和 [aeiou]。
- 僅支援 9 個反向參考,並且不能使用 \1 到 \9 來參考它們。
- 使用 \0dd 格式來比對八進位字元,而非 \ddd 格式。
- 最上層不支援內嵌式旗標,僅群組內支援這些旗標。例如,請勿使用「Case (?i:s)ensitive」,改為使用「Case ((?i:s)ensitive)」。
- 不支援前置處理作業 \l、\u、\L 及 \U。其中,\l - 可將下一個字元轉成小寫 \u - 可將下一個字元轉成大寫 \L - 可將 \E 之前的字元轉成小寫 \U - 可將 \E 之前的字元轉成大寫。
- 不支援 (?(condition)X)、(? {code})、(??{Code}) 及 (?#comment)。
- 不支援預先定義的 Unicode 字元類別 \X。
- 不支援將具名字元建構用於 Unicode 字元。例如,請勿使用 \N{name},改為使用 \u2018。
在比對條件中使用 REGEX 時,支援具名擷取群組。例如,可以使用 REGEX 比對模式 /news/(?<year>\d+)-(?<month>\d+)-(?<day>\d+)/(?<article>.*) 來比對諸如 /news/2018-06-15/news1234.html 的 URI。
然後,變數設定如下:$year = "2018" $month = "06" $day = "15" $article = "news1234.html"。設定變數後,可以在負載平衡器規則動作中使用這些變數。例如,可以使用相符的變數 (如 news.py?year=$year&month=$month&day=$day&article=$article) 重寫 URI。該 URI 隨即會重寫為 /news.py?year=2018&month=06&day=15&article=news1234.html。
重寫動作可以使用具名擷取群組和內建變數的組合。例如,可以將 URI 寫成 /news.py?year=$year&month=$month&day=$day&article=$article&user_ip=$_remote_addr。範例 URI 隨即重寫為 /news.py?year=2018&month=06&day=15&article=news1234.html&user_ip=1.1.1.1。
- $_args - 來自要求的引數
- $_arg_<name> - 要求行中的引數 <name>
- $_cookie_<name> - <name> Cookie 的值
- $_upstream_cookie_<name> - 具有指定名稱且由上游伺服器在「設定 Cookie」回應標頭欄位中傳送的 Cookie
- $_upstream_http_<name> - 任意回應標頭欄位,<name> 是轉換為小寫、且將虛線取代為底線的欄位名稱
- $_host - 依優先順序排列 - 要求行中的主機名稱、「主機」要求標頭欄位中的主機名稱,或符合要求的伺服器名稱
- $_http_<name> - 任意要求標頭欄位,<name> 為轉換為小寫且虛線以底線取代的欄位名稱
- $_https - 如果連線在 SSL 模式下運作則為「on」,其他情況為「」
- $_is_args - 如果要求行具有參數則為「?」,其他情況為「」
- $_query_string - 與 $_args 相同
- $_remote_addr - 用戶端位址
- $_remote_port - 用戶端連接埠
- $_request_uri - 完整原始要求 URI (具有引數)
- $_scheme - 要求配置,「http」或「https」
- $_server_addr - 接受要求的伺服器的位址
- $_server_name - 接受要求的伺服器的名稱
- $_server_port - 接受要求的伺服器的連接埠
- $_server_protocol - 要求通訊協定,通常是「HTTP/1.0」或「HTTP/1.1」
- $_ssl_client_cert - 以 PEM 格式傳回已建立 SSL 連線的用戶端憑證,除第一行外,每一行的前面都會加上定位字元
- $_ssl_server_name - 傳回透過 SNI 要求的伺服器名稱
- $_uri- 要求中的 URI 路徑
- $_ssl_ciphers:傳回用戶端 SSL 加密方式
- $_ssl_client_i_dn:根據 RFC 2253 傳回所建立 SSL 連線用戶端憑證的「簽發者 DN」字串
- $_ssl_client_s_dn:根據 RFC 2253 傳回所建立 SSL 連線用戶端憑證的「主體 DN」字串
- $_ssl_protocol:傳回所建立 SSL 連線的通訊協定
- $_ssl_session_reused:如果重複使用 SSL 工作階段,則傳回「r」,否則傳回「.」
必要條件
確認第 7 層虛擬伺服器可供使用。請參閱在管理程式模式中設定第 7 層虛擬伺服器。