页面规则 - 代理

概述

在 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 代码来动态选择上游服务器,这在本例中未使用(为空字符串)。

相关文档