Static Configurations
The gateway reads up to 1 MiB of GraphQL request data by default. Increase this limit when GraphQL documents or variables can produce larger request bodies. The following examples raise it to 2 MiB (2,097,152 bytes):
- Host or Docker
- Kubernetes (Helm)
For host or Docker deployments, configure the following setting:
graphql:
max_size: 2097152
Then reload the gateway for the change to take effect.
For APISIX Helm chart version 2.16.0 or later, configure the following value:
apisix:
graphql:
maxSize: 2097152
For API7 Gateway Helm chart version 3.10.3 or later, configure the following value:
graphql:
maxSize: 2097152
Earlier chart versions do not expose a value for this setting. Upgrade the chart, or maintain a chart overlay or Helm post-renderer that adds the graphql.max_size block shown in the Host or Docker tab to the generated config.yaml. Adding either value above to an older chart has no effect.
Add the setting to the complete, source-controlled values file used by the deployment. Set the release details, including the installed chart and version:
export GATEWAY_RELEASE=replace-with-gateway-release-name
export GATEWAY_NAMESPACE=replace-with-gateway-namespace
export GATEWAY_CHART=replace-with-installed-chart-name
export GATEWAY_CHART_VERSION=replace-with-installed-chart-version
Apply the complete values file without changing the chart version:
helm upgrade "$GATEWAY_RELEASE" "$GATEWAY_CHART" \
--namespace "$GATEWAY_NAMESPACE" \
--version "$GATEWAY_CHART_VERSION" \
-f values.yaml
Parameters
See plugin common configurations for configuration options available to all plugins.
count
vaild vaule:
greater than 0
The maximum accumulated GraphQL query cost allowed within a given time interval. Query cost is depth under the default strategy. Required when
rulesis not configured. The value can use built-in variables when configured as a string.time_window
vaild vaule:
greater than 0
The time interval corresponding to the rate limiting
countin seconds. Required whenrulesis not configured. The value can use built-in variables when configured as a string.window_type
vaild vaule:
fixedorslidingThe rate limiting window algorithm.
fixedenforces each time window independently.slidingweights the previous window when calculating the current cost to smooth bursts at window boundaries.Introduced in API7 Enterprise 3.9.14 and 3.10.1, and APISIX 3.18.0.
sync_interval
vaild vaule:
-1or greater than or equal to0.1; must be smaller than a numeric top-leveltime_windowThe interval in seconds at which a local counter is synchronized to Redis. It applies to
redis,redis-cluster, andredis-sentinel.-1synchronizes every request. Delayed synchronization reduces Redis round trips but allows slightly looser enforcement.If the applicable
time_windowis less than or equal tosync_intervalat runtime, the gateway synchronizes that request directly.Introduced in API7 Enterprise 3.9.14 and 3.10.1, and APISIX 3.18.0.
rules
An array of rate-limiting rules that are applied sequentially. Configure either
rulesor the top-levelcountandtime_window, but not both.count
vaild vaule:
greater than 0
The maximum accumulated GraphQL query cost allowed within the rule's
time_window. Query cost is depth under the default strategy. The value can use built-in variables when configured as a string.time_window
vaild vaule:
greater than 0
The time interval corresponding to the rule's
countin seconds. The value can use built-in variables when configured as a string.key
The key to count requests by. Supports combinations of built-in variables, with each variable prefixed by a dollar sign (
$). If the key cannot be resolved, the rule is not applied.header_prefix
Prefix inserted into the rate limiting response headers for this rule. For example,
fooproducesX-foo-RateLimit-Limit,X-foo-RateLimit-Remaining, andX-foo-RateLimit-Reset.
cost_strategy
vaild vaule:
depth,complexity, ornode_quantifierHow the raw cost of a GraphQL document is computed.
depthcounts the selection nesting depth and remains the default.complexityscores the nodes the query resolves.node_quantifierscores only nodes whose matching cost decoration resolves an argument listed inmul_arguments. If no node has both a matching decoration and a usable quantifier, the raw score is0.For
complexityandnode_quantifier, the plugin adds0.01, appliesscore_factor, and rounds up before charging the quota. With the default factor, a zero raw score costs1; a factor greater than100increases it.Introduced in API7 Enterprise 3.10.6 and APISIX 3.19.0.
max_cost
vaild vaule:
greater than or equal to 0
Reject a document whose charged cost exceeds this value with
403 Forbiddenbefore it reaches the upstream. The rate limiter evaluates the charge first, so a request rejected by this check may still consume quota.0disables the check. Introduced in API7 Enterprise 3.10.6 and APISIX 3.19.0.score_factor
vaild vaule:
greater than 0
Scaling applied before the cost is rounded up, charged against the quota, and compared with
max_cost. Introduced in API7 Enterprise 3.10.6 and APISIX 3.19.0.resolve_variables
If true, resolve supplied GraphQL variables, variable defaults declared by the operation, and argument defaults from the upstream schema when computing cost. The default ensures variable-based quantifiers contribute their resolved value. Introduced in API7 Enterprise 3.10.6 and APISIX 3.19.0.
introspection_endpoint
vaild vaule:
starts with
http://orhttps://Endpoint used to introspect the upstream GraphQL schema, which the
complexityandnode_quantifierstrategies need to match cost decorations. Derived from the upstream when unset. Each worker caches the schema for its lifetime. Introduced in API7 Enterprise 3.10.6 and APISIX 3.19.0.introspection_headers
Headers sent when schema introspection requires credentials. When data encryption is enabled on the data plane, this field is encrypted at rest. Introduced in API7 Enterprise 3.10.6 and APISIX 3.19.0.
key_type
vaild vaule:
var,var_combination, orconstantThe type of key.
If the
key_typeisvar, thekeyis interpreted as a variable.If the
key_typeisvar_combination, thekeyis interpreted as a combination of variables.If the
key_typeisconstant, thekeyis interpreted as a constant.key
The key to count requests by.
If the
key_typeisvar, thekeyis interpreted as a variable. The variable does not need to be prefixed by a dollar sign ($). See built-in variables for available variables.If the
key_typeisvar_combination, thekeyis interpreted as a combination of variables. All variables should be prefixed by dollar signs ($). For example, to configure thekeyto use a combination of two request headerscustom-aandcustom-b, thekeyshould be configured as$http_custom_a $http_custom_b.If the
key_typeisconstant, thekeyis interpreted as a constant value.rejected_code
vaild vaule:
between 200 and 599 inclusive
The HTTP status code returned when a request is rejected for exceeding the threshold.
rejected_msg
vaild vaule:
any non-empty string
The response body returned when a request is rejected for exceeding the threshold.
policy
vaild vaule:
local,redis,redis-cluster, orredis-sentinelWhere rate limiting counters are stored.
localuses each gateway instance's memory. The Redis policies share counters through a single Redis server, Redis Cluster, or Redis Sentinel deployment.The
redis-sentinelpolicy was introduced in API7 Enterprise 3.9.14 and 3.10.1, and APISIX 3.18.0.allow_degradation
If true, continue handling requests without rate limiting when the counter backend fails or a variable-resolved
countortime_windowis invalid. If false, these failures return500 Internal Server Error.show_limit_quota_header
If true, includes the rate limiting response headers. Specifically:
X-RateLimit-Limitshows the total quota.X-RateLimit-Remainingshows the remaining quota.X-RateLimit-Resetshows the algorithm-specific reset or delay value in seconds.X-Graphql-Query-Costshows the charged query cost in API7 Enterprise 3.10.6 and APISIX 3.19.0.
group
vaild vaule:
non-empty
The group ID used to share one counter across routes with identical plugin configuration. Do not configure
grouptogether withrules.redis_host
The address of the Redis node. Required when
policyisredis.redis_port
vaild vaule:
greater than or equal to 1
The port of the Redis node when
policyisredis.redis_username
The username for Redis ACL authentication when
policyisredisorredis-sentinel. If Redis uses only the legacyrequirepassmethod, configureredis_passwordwithout a username.redis_password
The password used to authenticate with Redis when
policyisredis,redis-cluster, orredis-sentinel.The password is encrypted at rest in API7 Enterprise. In APISIX, enable data encryption to encrypt it before etcd storage.
Encryption was introduced in API7 Enterprise 3.9.16 and 3.10.2, and APISIX 3.18.0.
redis_database
vaild vaule:
greater than or equal to 0
The Redis database number when
policyisredisorredis-sentinel.redis_ssl
If true, use SSL to connect to Redis when
policyisredis.redis_ssl_verify
If true, verify the server SSL certificate when
policyisredis.redis_server_name
TLS server name used for SNI and, when certificate verification is enabled, hostname verification. Applies when
policyisredisandredis_sslistrue. Defaults toredis_host. If the selected value is an IP address, no server name is sent. To verify a DNS-named certificate when connecting by IP, set this field to the certificate's DNS name and enableredis_ssl_verify.Introduced in API7 Enterprise 3.9.21 and 3.10.8, and in APISIX 3.19.0. This field applies to the single-node Redis connector, not Redis Cluster or Sentinel.
redis_timeout
vaild vaule:
greater than or equal to 1
The Redis timeout value in milliseconds when
policyisredisorredis-cluster.redis_keepalive_timeout
vaild vaule:
redisandredis-cluster: greater than or equal to 1000;redis-sentinel: greater than or equal to 1Time in milliseconds that an idle Redis connection remains in the connection pool.
Introduced for
redisandredis-clusterin API7 Enterprise 3.9.16 and 3.10.3, and in APISIX 3.17.0. Redis Sentinel support was introduced in API7 Enterprise 3.9.14 and 3.10.1, and in APISIX 3.18.0.redis_keepalive_pool
vaild vaule:
greater than or equal to 1
Keepalive pool size for Redis when
policyisredisorredis-cluster.Introduced in API7 Enterprise 3.9.16 and 3.10.3, and in APISIX 3.17.0.
redis_cluster_nodes
A non-empty list of Redis Cluster node addresses. Required when
policyisredis-cluster. Provide multiple reachable nodes so initial discovery can continue when one node is unavailable.redis_cluster_name
The name of the Redis cluster. Required when
policyisredis-cluster.redis_cluster_ssl
If true, use SSL to connect to Redis cluster when
policyisredis-cluster.redis_cluster_ssl_verify
If true, verify the server SSL certificate when
policyisredis-cluster.redis_sentinels
The Redis Sentinel nodes. Required when
policyisredis-sentinel.host
vaild vaule:
at least 2 characters
Hostname or IP address of a Redis Sentinel node.
port
vaild vaule:
between 1 and 65535 inclusive
Port of a Redis Sentinel node.
redis_master_name
The master group monitored by the Sentinel nodes. Required when
policyisredis-sentinel.redis_role
vaild vaule:
masterorslaveThe Redis role requested from Sentinel when
policyisredis-sentinel.redis_connect_timeout
vaild vaule:
greater than or equal to 1
Timeout in milliseconds for connecting to Redis when
policyisredis-sentinel.redis_read_timeout
vaild vaule:
greater than or equal to 1
Timeout in milliseconds for reading from Redis when
policyisredis-sentinel.sentinel_username
Username used to authenticate with Redis Sentinel when
policyisredis-sentinel.sentinel_password
Password used to authenticate with Redis Sentinel when
policyisredis-sentinel.The password is encrypted at rest in API7 Enterprise. In APISIX, enable data encryption to encrypt it before etcd storage.
Encryption was introduced in API7 Enterprise 3.9.16 and 3.10.2, and APISIX 3.18.0.
Plugin Metadata
limit_header
Default response header name for the total rate limit quota. Introduced in API7 Enterprise 3.10.6 and APISIX 3.19.0.
remaining_header
Default response header name for the remaining rate limit quota. Introduced in API7 Enterprise 3.10.6 and APISIX 3.19.0.
reset_header
Default response header name for the number of seconds until the rate limit counter resets. Introduced in API7 Enterprise 3.10.6 and APISIX 3.19.0.