頁面規則 - 代理

概述

在 OpenResty Edge 的頁面規則中,proxy 部分用於配置請求代理的行為。這包括上游伺服器的選擇、負載均衡策略、超時設定等。

配置說明

proxy 配置是頁面規則中的一個可選部分。它包含以下主要欄位:

欄位名型別描述
retriesinteger重試次數,-1 表示根據上游中存在的閘道器伺服器數量進行重試
upstreamarray主上游伺服器列表
backup_upstreamarray備用上游伺服器列表
balancerobject負載均衡器配置
upstream_el_codestring選擇上游的 EdgeLang 程式碼
connect_timeoutinteger連線超時時間(秒)
stickyobject會話保持配置
retry_conditionarray重試條件列表
send_timeoutinteger傳送超時時間(秒)
read_timeoutinteger讀取超時時間(秒)

upstream 和 backup_upstream 配置

upstreambackup_upstream 都是上游伺服器列表,每個伺服器配置包含:

欄位名型別描述
cluster_typestring叢集型別,可選值:http, http_k8s, global, global_k8s
cluster_namestring叢集名稱

http 表示 HTTP 應用內的普通上游。 http_k8s 表示 HTTP 應用內的 Kubernetes 上游。 global 表示全域性普通上游。 global_k8s 表示全域性 Kubernetes 上游。

balancer 配置

balancer 配置負載均衡策略:

欄位名型別描述
algorithmstring負載均衡演算法,例如 “roundrobin”

sticky 配置

sticky 用於配置會話保持,確保來自同一客戶端的請求總是傳送到同一個/一組上游伺服器:

欄位名型別描述
enableboolean是否啟用 Sticky Cookie
modestringSticky Cookie 的模式
ttlintegerSticky Cookie 的存活時間
keystringSticky Cookie 的名稱
levelstringSticky Cookie 的級別,支援 upstream 和 server 級別

配置示例

proxy:
  retries: -1
  upstream:
  - cluster_type: http
    cluster_name: app_upstream_name1
  - cluster_type: http
    cluster_name: app_upstream_name2
  backup_upstream:
  - cluster_type: http_k8s
    cluster_name: app_k8s_upstream_name2
  balancer:
    algorithm: roundrobin
  upstream_el_code: ''
  connect_timeout: 6
  sticky:
    enable: true
    mode: none
    ttl: 1
    key: Edge-Sticky
    level: upstream
  retry_condition:
  - error
  - timeout
  - invalid_header
  - http_500
  - http_502
  - http_504
  send_timeout: 6
  read_timeout: 6

此配置定義了一個代理規則,使用兩個 HTTP 上游伺服器作為主要伺服器,一個 Kubernetes 上游伺服器作為備用伺服器。它使用輪詢(roundrobin)演算法進行負載均衡,啟用了會話保持,並設定了各種超時和重試條件。

注意事項

  1. cluster_type 可以是 “http”、“http_k8s”、“global” 或 “global_k8s”,分別對應應用 HTTP 上游、應用 Kubernetes 上游、全域性 HTTP 上游和全域性 Kubernetes 上游。

  2. cluster_name 必須與之前定義的上游名稱相匹配。

  3. retries 設定為 -1 時,表示根據上游中存在的閘道器伺服器數量進行重試。

  4. sticky 配置允許你實現會話保持,確保來自同一客戶端的請求總是傳送到同一個上游伺服器。

  5. retry_condition 列出了觸發重試的條件,包括各種錯誤和特定的 HTTP 狀態碼。

  6. 超時設定(connect_timeoutsend_timeoutread_timeout)以秒為單位。

  7. upstream_el_code 允許你使用 EdgeLang 程式碼來動態選擇上游伺服器,這在本例中未使用(為空字串)。

相關文件