Todos os produtos
Search
Central de documentação

API Gateway:cluster-key-rate-limit

Última atualização: Jun 27, 2026

O plug-in cluster-key-rate-limit implementa limitação de taxa em nível de cluster baseada em Redis para garantir controle de fluxo globalmente consistente entre múltiplas instâncias do Higress Gateway. As chaves podem derivar de parâmetros de URL, cabeçalhos de requisição HTTP, endereços IP do cliente, nomes de consumidores ou chaves de cookies.

Atributos de execução

Estágio de execução do plug-in: default stage. Prioridade de execução do plug-in: 20.

Parâmetros

Campo

Tipo

Obrigatório

Valor padrão

Comentário

rule_name

string

Sim

-

Nome da regra de limitação. O sistema concatena o nome da regra, o tipo de limitação, o nome da chave e o valor real da chave para formar a chave do Redis.

rule_items

array de objetos

Sim

-

Itens da regra de limitação, avaliados em ordem. Após encontrar uma correspondência, o sistema ignora os itens subsequentes.

show_limit_quota_header

bool

Não

false

Defina se a resposta deve incluir os cabeçalhos X-RateLimit-Limit (total de requisições limitadas) e X-RateLimit-Remaining (requisições permitidas restantes).

rejected_code

int

Não

429

Código de status HTTP retornado quando as requisições são limitadas.

rejected_msg

string

Não

Too many requests

Corpo da resposta retornado quando as requisições são limitadas.

redis

objeto

Sim

-

Configurações de conexão do Redis.

A tabela a seguir descreve os campos em rule_items.

Campo

Tipo

Obrigatório

Valor padrão

Descrição

limit_by_header

string

Não. Configure apenas um dos campos limit_by_*.

-

Nome do cabeçalho de requisição HTTP usado como chave de limitação.

limit_by_param

string

Não. Configure apenas um dos campos limit_by_*.

-

Nome do parâmetro de URL usado como chave de limitação.

limit_by_consumer

string

Não. Configure apenas um dos campos limit_by_*.

-

Nome do consumidor usado como chave de limitação. Nenhum valor real é necessário.

limit_by_cookie

string

Não. Configure apenas um dos campos limit_by_*.

-

Nome da chave do cookie usado como chave de limitação.

limit_by_per_header

string

Não. Configure apenas um dos campos limit_by_*.

-

Nome do cabeçalho de requisição HTTP para limitação por valor individual. Cada valor distinto de cabeçalho tem sua taxa limitada independentemente. O campo limit_keys aceita expressões regulares e asteriscos (*).

limit_by_per_param

string

Não. Configure apenas um dos campos limit_by_*.

-

Nome do parâmetro de URL para limitação por valor individual. Cada valor distinto de parâmetro tem sua taxa limitada independentemente. O campo limit_keys aceita expressões regulares e asteriscos (*).

limit_by_per_consumer

string

Não. Configure apenas um dos campos limit_by_*.

-

Nome do consumidor para limitação por consumidor individual. Cada consumidor tem sua taxa limitada independentemente. Nenhum valor real é necessário. O campo limit_keys aceita expressões regulares e asteriscos (*).

limit_by_per_cookie

string

Não. Configure apenas um dos campos limit_by_*.

-

Nome da chave do cookie para limitação por valor individual. Cada valor distinto de cookie tem sua taxa limitada independentemente. O campo limit_keys aceita expressões regulares e asteriscos (*).

limit_by_per_ip

string

Não. Configure apenas um dos campos limit_by_*.

-

Origem do endereço IP para limitação por IP individual. Defina como from-header-<Nome do cabeçalho> (por exemplo, from-header-x-forwarded-for) para extrair endereços IP de um cabeçalho de requisição ou from-remote-addr para usar o IP do socket remoto. Cada endereço IP tem sua taxa limitada independentemente.

limit_keys

array de objetos

Sim.

-

Limiares de limitação de taxa aplicados ao corresponder a um valor de chave.

A tabela a seguir descreve os campos em limit_keys.

Campo

Tipo

Obrigatório

Valor padrão

Descrição

key

string

Sim.

-

Valor da chave a ser correspondido. Para limit_by_per_header, limit_by_per_param, limit_by_per_consumer e limit_by_per_cookie, há suporte a expressões regulares (com prefixo regexp:) e asteriscos (*). Um asterisco corresponde a todos os valores. Exemplo: regexp: ^d.* corresponde a todas as strings que começam com d. Para limit_by_per_ip, há suporte a endereços IP e blocos CIDR.

query_per_second

int

Não. Configure um entre query_per_second, query_per_minute, query_per_hour e query_per_day.

-

Requisições permitidas por segundo.

query_per_minute

int

Não. Configure um entre query_per_second, query_per_minute, query_per_hour e query_per_day.

-

Requisições permitidas por minuto.

query_per_hour

int

Não. Configure um entre query_per_second, query_per_minute, query_per_hour e query_per_day.

-

Requisições permitidas por hora.

query_per_day

int

Não. Configure um entre query_per_second, query_per_minute, query_per_hour e query_per_day.

-

Requisições permitidas por dia.

A tabela a seguir descreve os campos em redis.

Campo

Tipo

Obrigatório

Valor padrão

Descrição

service_name

string

Sim

-

Nome do serviço Redis como nome de domínio totalmente qualificado (FQDN), como my-redis.DNS ou redis.my-ns.svc.cluster.local.

service_port

int

Não

Se o tipo de serviço for static service, o valor padrão é 80. Para outros serviços, o valor padrão é 6379.

Número da porta da instância Tair (compatível com Redis OSS).

username

string

Não

-

Nome de usuário do Redis.

password

string

Não

-

Senha do Redis.

timeout

int

Não

1000

Tempo limite de conexão para a instância Tair (compatível com Redis OSS), em milissegundos.

Exemplos de configuração

Identificar requisições com base no parâmetro apikey e aplicar diferentes operações de limitação

rule_name: default_rule
rule_items:
- limit_by_param: apikey
  limit_keys:
  - key: 9a342114-ba8a-11ec-b1bf-00163e1250b5
    query_per_minute: 10
  - key: a6a6d7f2-ba8a-11ec-bec2-00163e1250b5
    query_per_hour: 100
- limit_by_per_param: apikey
  limit_keys:
  # A regular expression is used to match all strings that start with a. For each request that matches the apikey parameter, 10 QDS is allowed.
  - key: "regexp:^a.*"
    query_per_second: 10
  # A regular expression is used to match all strings that start with b. For each request that matches the apikey parameter, 100 QD is allowed.
  - key: "regexp:^b.*"
    query_per_minute: 100
  # All requests are matched. For each request, 1,000 QDH is allowed.
  - key: "*"
    query_per_hour: 1000
redis:
  service_name: redis.static
show_limit_quota_header: true

Identificar requisições com base no cabeçalho de requisição x-ca-key e aplicar diferentes operações de limitação

rule_name: default_rule
rule_items:
- limit_by_header: x-ca-key
  limit_keys:
  - key: 102234
    query_per_minute: 10
  - key: 308239
    query_per_hour: 10
- limit_by_per_header: x-ca-key
  limit_keys:
  # A regular expression is used to match all strings that start with a. For each request that matches the apikey parameter, 10 QDS is allowed.
  - key: "regexp:^a.*"
    query_per_second: 10
  # A regular expression is used to match all strings that start with b. For each request that matches the apikey parameter, 100 QD is allowed.
  - key: "regexp:^b.*"
    query_per_minute: 100
  # All requests are matched. For each request, 1,000 QDH is allowed.
  - key: "*"
    query_per_hour: 1000
redis:
  service_name: redis.static
show_limit_quota_header: true

Obter endereços IP remotos com base no cabeçalho de requisição x-forwarded-for e aplicar diferentes operações de limitação

rule_name: default_rule
rule_items:
- limit_by_per_ip: from-header-x-forwarded-for
  limit_keys:
  # The exact IP address.
  - key: 1.1.1.1
    query_per_day: 10
  # The CIDR block. For each IP address in the CIDR block, 100 QPD is allowed.
  - key: 1.1.1.0/24
    query_per_day: 100
  # By default, 1,000 QPD is allowed for each IP address.
  - key: 0.0.0.0/0
    query_per_day: 1000
redis:
  service_name: redis.static
show_limit_quota_header: true

Identificar requisições com base em consumidores e aplicar diferentes operações de limitação

rule_name: default_rule
rule_items:
- limit_by_consumer: ''
  limit_keys:
  - key: consumer1
    query_per_second: 10
  - key: consumer2
    query_per_hour: 100
- limit_by_per_consumer: ''
  limit_keys:
  # A regular expression is used to match all strings that start with a. For each consumer that matches the apikey parameter, 10 QDS is allowed.
  - key: "regexp:^a.*"
    query_per_second: 10
  # A regular expression is used to match all strings that start with b. For each consumer that matches the apikey parameter, 100 QD is allowed.
  - key: "regexp:^b.*"
    query_per_minute: 100
  # All requests are matched. For each consumer, 1,000 QDH is allowed.
  - key: "*"
    query_per_hour: 1000
redis:
  service_name: redis.static
show_limit_quota_header: true

Identificar requisições com base em pares chave-valor em cookies e aplicar diferentes operações de limitação

rule_name: default_rule
rule_items:
  - limit_by_cookie: key1
    limit_keys:
      - key: value1
        query_per_minute: 10
      - key: value2
        query_per_hour: 100
  - limit_by_per_cookie: key1
    limit_keys:
      # A regular expression is used to match all strings that start with a. For each request that matches a specific cookie value, 10 QDS is allowed.
      - key: "regexp:^a.*"
        query_per_second: 10
      # A regular expression is used to match all strings that start with b. For each request that matches a specific cookie value, 100 QD is allowed.
      - key: "regexp:^b.*"
        query_per_minute: 100
      # All requests are matched. For each request, 1,000 QDH is allowed.
      - key: "*"
        query_per_hour: 1000
rejected_code: 200
rejected_msg: '{"code":-1,"msg":"Too many requests"}'
redis:
  service_name: redis.static
show_limit_quota_header: true