對於第 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 - 來自要求的引數
  • $_cookie_<name> - <name> Cookie 的值
  • $_host - 依優先順序排列 - 要求行中的主機名稱、「主機」要求標頭欄位中的主機名稱,或符合要求的伺服器名稱
  • $_hostname - 主機名稱
  • $_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 路徑

必要條件

確認第 7 層虛擬伺服器可供使用。請參閱設定第 7 層虛擬伺服器

程序

  1. 開啟第 7 層虛擬伺服器。
  2. 跳至 [虛擬伺服器識別碼] 頁面。
  3. 輸入虛擬伺服器 IP 位址和連接埠號碼。
    您可以輸入虛擬伺服器連接埠號碼或連接埠範圍。
  4. 完成進階內容詳細資料。
    選項 說明
    並行連線數目上限 設定虛擬伺服器所允許的並行連線數目上限,以便虛擬伺服器不會耗盡相同負載平衡器上主控的其他應用程式的資源。
    新連線速率上限 設定與伺服器集區成員的新連線數目上限,以便虛擬伺服器不會耗盡資源。
    預設集區成員連接埠 如果未定義虛擬伺服器的集區成員連接埠,請輸入預設集區成員連接埠。

    例如,如果虛擬伺服器所定義的連接埠範圍為 2000 – 2999,並且預設集區成員連接埠範圍設定為 8000 - 8999,則到虛擬伺服器連接埠 2500 的傳入用戶端連線會傳送到目的地連接埠設定為 8500 的集區成員。

  5. (選擇性) 從下拉式功能表中選取現有的預設伺服器集區。
    伺服器集區由一或多個以相同方式設定且執行相同應用程式的伺服器 (稱為集區成員) 組成。
  6. 按一下新增,針對 HTTP 要求重寫階段設定負載平衡器規則。
    支援的比對類型為 REGEX、STARTS_WITH、ENDS_WITH 等以及反向選項。
    支援的比對條件 說明
    HTTP 要求方法 比對 HTTP 要求方法。

    http_request.method - 要比對的值

    HTTP 要求 URI 比對不含查詢引數的 HTTP 要求 URI。

    http_request.uri - 要比對的值

    HTTP 要求 URI 引數 比對 HTTP 要求 URI 查詢引數。

    http_request.uri_arguments - 要比對的值

    HTTP 要求版本 比對 HTTP 要求版本。

    http_request.version - 要比對的值

    HTTP 要求標頭 比對任何 HTTP 要求標頭。

    http_request.header_name - 要比對的標頭名稱

    http_request.header_value - 要比對的值

    HTTP 要求裝載 比對 HTTP 要求的內文內容。

    http_request.body_value - 要比對的值

    TCP 標頭欄位 比對 TCP 來源或目的地連接埠。

    tcp_header.source_port - 要比對的來源連接埠

    tcp_header.destination_port - 要比對的目的地連接埠

    IP 標頭欄位 比對 IP 來源或目的地位址。

    ip_header.source_address - 要比對的來源位址

    ip_header.destination_address - 要比對的目的地位址

    動作 說明
    HTTP 要求 URI 重寫 修改 URI。

    http_request.uri - 要寫入的 URI (不含查詢引數)

    http_request.uri_args - 要寫入的 URI 查詢引數

    HTTP 要求標頭重寫 修改 HTTP 標頭的值。

    http_request.header_name - 標頭名稱

    http_request.header_value - 要寫入的值

  7. 按一下新增,針對 HTTP 要求轉送設定負載平衡器規則。
    所有比對值都接受規則運算式。
    支援的比對條件 說明
    HTTP 要求方法 比對 HTTP 要求方法。

    http_request.method - 要比對的值

    HTTP 要求 URI 比對 HTTP 要求 URI。

    http_request.uri - 要比對的值

    HTTP 要求 URI 引數 比對 HTTP 要求 URI 查詢引數。

    http_request.uri_args - 要比對的值

    HTTP 要求版本

    比對 HTTP 要求版本。

    http_request.version - 要比對的值

    HTTP 要求標頭

    比對任何 HTTP 要求標頭。

    http_request.header_name - 要比對的標頭名稱

    http_request.header_value - 要比對的值

    HTTP 要求裝載

    比對 HTTP 要求的內文內容。

    http_request.body_value - 要比對的值

    TCP 標頭欄位

    比對 TCP 來源或目的地連接埠。

    tcp_header.source_port - 要比對的來源連接埠

    tcp_header.destination_port - 要比對的目的地連接埠

    IP 標頭欄位

    比對 IP 來源位址。

    ip_header.source_address - 要比對的來源位址

    動作 說明
    拒絕 拒絕要求,例如,透過將狀態設定為 5xx。

    http_forward.reply_status - 用於拒絕的 HTTP 狀態碼

    http_forward.reply_message - HTTP 拒絕訊息

    重新導向 重新導向要求。狀態碼必須設定為 3xx。

    http_forward.redirect_status - 要重新導向的 HTTP 狀態碼

    http_forward.redirect_url - HTTP 重新導向 URL

    選取集區

    強制執行對特定伺服器集區的要求。指定集區成員所設定的演算法 (預測工具) 用於選取伺服器集區內的伺服器。

    http_forward.select_pool - 伺服器集區 UUID

  8. 按一下新增,針對 HTTP 回應重寫設定負載平衡器規則。
    所有比對值都接受規則運算式。
    支援的比對條件 說明
    HTTP 回應標頭 比對任何 HTTP 回應標頭。

    http_response.header_name - 要比對的標頭名稱

    http_response.header_value - 要比對的值

    動作 說明
    HTTP 回應標頭重寫 修改 HTTP 回應標頭的值。

    http_response.header_name - 標頭名稱

    http_response.header_value - 要寫入的值

  9. (選擇性) 下一步以設定負載平衡設定檔。
  10. 按一下完成