Skip to main content
Version: Dev

Environment Variables

AISIX AI Gateway uses environment variables to select startup configuration files, override startup configuration fields, and provide deployment-specific values such as AISIX gateway certificate material.

Most runtime gateway resources are not configured directly through environment variables. For an open-source AISIX gateway, declare models, caller API keys, provider keys, guardrails, cache policies, and observability exporters in a resources.yaml file. The file supports environment interpolation for values such as ${OPENAI_API_KEY}.

For an AISIX gateway connected to AISIX Cloud, the control plane supplies these resources.

Reserved Environment Variables​

AISIX reserves the following environment variables:

VariableDescription
AISIX_CONFIGStartup configuration file path used by the AISIX binary, equivalent to passing --config. Read only when you run the binary directly.
AISIX_CONFIG_PATHConfig file path used by the official container entrypoint. Defaults to /etc/aisix/config.yaml.
AISIX_DP_BUDGET_STALE_MAX_SECONDSMaximum age, in seconds, of a cached budget decision that a gateway connected to AISIX Cloud may keep honoring while the control plane is unreachable. Defaults to 600.
RUST_LOGProcess logging directive. When unset, AISIX uses observability.log_level.

These are the AISIX variables that name something other than a startup configuration field. AISIX reads each one by name and never treats it as a startup configuration override.

When you run the binary directly, select the startup configuration with the --config option:

aisix --config /etc/aisix/config.yaml

Use AISIX_CONFIG_PATH only with the official container entrypoint:

docker run \
-v "$(pwd)/config.prod.yaml:/etc/aisix/config.prod.yaml:ro" \
-e AISIX_CONFIG_PATH="/etc/aisix/config.prod.yaml" \
ghcr.io/api7/aisix:dev

Startup Configuration Overrides​

After AISIX loads the config file, it applies environment-variable overrides with the AISIX_ prefix. Use a single underscore after the prefix and double underscores between nested fields.

Helm deployments

The api7/aisix Helm chart renders the startup configuration file from its config value, and reads settings that hold a credential from Secrets through configSecrets. Set startup fields there rather than as environment variables in extraEnvVars. An AISIX_* variable set through extraEnvVars still overrides the rendered file. See Set Any Other Gateway Configuration.

The following example overrides the proxy listener address:

export AISIX_PROXY__ADDR="0.0.0.0:3000"

Common override variables include:

VariableOverrides
AISIX_PROXY__ADDRproxy.addr
AISIX_PROXY__THREAD_PER_COREproxy.thread_per_core
AISIX_PROXY__WORKERSproxy.workers
AISIX_ETCD__ENDPOINTSetcd.endpoints
AISIX_ETCD__PREFIXetcd.prefix
AISIX_OBSERVABILITY__LOG_LEVELobservability.log_level
AISIX_CACHE__REDIS__MODEcache.redis.mode
AISIX_CACHE__REDIS__URLcache.redis.url
AISIX_CACHE__REDIS__MASTER_NAMEcache.redis.master_name
AISIX_CACHE__REDIS__USERNAMEcache.redis.username
AISIX_CACHE__REDIS__PASSWORDcache.redis.password
AISIX_CACHE__REDIS__DATABASEcache.redis.database
AISIX_CACHE__REDIS__TIMEOUT_SECScache.redis.timeout_secs
AISIX_RATELIMIT__BACKENDratelimit.backend
AISIX_RATELIMIT__REDIS__MODEratelimit.redis.mode
AISIX_RATELIMIT__REDIS__URLratelimit.redis.url
AISIX_RATELIMIT__REDIS__MASTER_NAMEratelimit.redis.master_name
AISIX_RATELIMIT__REDIS__USERNAMEratelimit.redis.username
AISIX_RATELIMIT__REDIS__PASSWORDratelimit.redis.password
AISIX_RATELIMIT__REDIS__DATABASEratelimit.redis.database
AISIX_RATELIMIT__REDIS__TIMEOUT_SECSratelimit.redis.timeout_secs
AISIX_RATELIMIT__CONCURRENCY_TTL_SECSratelimit.concurrency_ttl_secs
AISIX_BEDROCK_ENDPOINT_URLTop-level bedrock_endpoint_url.

A list field takes a comma-separated value in an environment variable, such as AISIX_ETCD__ENDPOINTS="http://etcd-0:2379,http://etcd-1:2379". The following fields accept one:

VariableOverrides
AISIX_ETCD__ENDPOINTSetcd.endpoints
AISIX_ADMIN__ADMIN_KEYSadmin.admin_keys
AISIX_PROXY__REAL_IP__TRUSTED_PROXIESproxy.real_ip.trusted_proxies
AISIX_PROXY__REQUEST_ID__ACCEPT_HEADERSproxy.request_id.accept_headers
AISIX_OBSERVABILITY__METRICS__BUCKETS__REQUEST_E2E_LATENCYobservability.metrics.buckets.request_e2e_latency
AISIX_OBSERVABILITY__METRICS__BUCKETS__REQUEST_TTFTobservability.metrics.buckets.request_ttft
AISIX_OBSERVABILITY__METRICS__BUCKETS__GUARDRAIL_LATENCYobservability.metrics.buckets.guardrail_latency
AISIX_OBSERVABILITY__METRICS__BUCKETS__A2A_TTFBobservability.metrics.buckets.a2a_ttfb
AISIX_OBSERVABILITY__HEAP_PROFILING__AUTO_DUMP__THRESHOLDSobservability.heap_profiling.auto_dump.thresholds
AISIX_OBSERVABILITY__USAGE_EVENT__REQUEST_HEADERSobservability.usage_event.request_headers
AISIX_CACHE__REDIS__NODEScache.redis.nodes
AISIX_CACHE__REDIS__SENTINELScache.redis.sentinels
AISIX_RATELIMIT__REDIS__NODESratelimit.redis.nodes
AISIX_RATELIMIT__REDIS__SENTINELSratelimit.redis.sentinels

A Redis node or sentinel URL given this way cannot contain a comma. Put Redis credentials in the separate username and password fields, such as AISIX_CACHE__REDIS__PASSWORD, rather than in the URL.

In 1.5.0 and earlier, observability.heap_profiling.auto_dump.thresholds, cache.redis.nodes, cache.redis.sentinels, ratelimit.redis.nodes, and ratelimit.redis.sentinels can be set only in the startup configuration file. Setting one of them through an environment variable stops those gateways from starting.

A list of objects — proxy.listeners, proxy.url_rewrites, or observability.metrics.client_type_rules — takes the whole list as one JSON array in a single variable. See TLS and mTLS and URL Rewriting for examples.

For configuration file fields, see the Startup Configuration Reference.

Unrecognized AISIX Variables​

AISIX judges an AISIX_-prefixed variable by its first segment. It converts the name to lower case, strips the prefix, and splits the rest on __ or .. If that first segment is one of the top-level startup configuration sections — admin, bedrock_endpoint_url, cache, downstream, etcd, managed, observability, proxy, ratelimit, resources_file, shutdown, or upstream — the variable is applied as an override. Otherwise it is ignored, and AISIX logs one warning per variable at startup:

AISIX_OSS_PORT_9090_TCP_PROTO was not applied as a configuration override: it names no gateway setting, and a nested setting is spelled AISIX_<SECTION>__<KEY>. If the configuration reads it by name (etcd.password_env, a resources-file interpolation) it still applies; otherwise nothing reads it — Kubernetes injects variables of this shape for every Service named aisix or aisix-*, which enableServiceLinks: false on the pod spec turns off.

Ignoring the variable is not the same as nothing reading it. A variable AISIX names from the startup configuration — etcd.password_env, for example — or from a resources.yaml interpolation still applies, because that reference is resolved by name after the configuration is parsed. The warning is emitted before either is known.

A misspelled key under a real section is a different case and is not tolerated. AISIX_PROXY__TIMEOTU leads with proxy, so it reaches the configuration parser and fails startup with an unknown-field error. That is deliberate: a typo in a setting you meant to set should stop the gateway rather than be silently dropped.

The reserved variables are skipped without a warning, because AISIX reads each of them by name.

Kubernetes injects a set of Docker-style link variables into every container for each Service in the namespace, named after the Service. A Service called aisix or aisix-something therefore produces variables such as AISIX_PORT_80_TCP_ADDR and AISIX_OSS_SERVICE_HOST inside the gateway container — including the Service this very gateway is published through, and any AISIX Cloud control plane installed in the same namespace.

None of them name a gateway setting, so each produces one startup warning. Turn them off on the pod spec:

spec:
template:
spec:
enableServiceLinks: false

The official api7/aisix Helm chart sets this on the gateway pods already. Set it yourself if you deploy the gateway from hand-written manifests.

AISIX Cloud Connection Variables​

AISIX gateways use the same AISIX_ override mechanism for managed.* startup settings.

VariableDescription
AISIX_MANAGED__ENABLEDConnects the gateway to AISIX Cloud when set to true.
AISIX_MANAGED__CP_BASE_URLAISIX Cloud control-plane origin used for heartbeat, telemetry, and budget checks. An https:// URL such as https://dpm.example.com:7944.
AISIX_MANAGED__CP_ETCD_ENDPOINTControl-plane etcd endpoint used by the gateway at startup. A bare host:port without a URL scheme.
AISIX_MANAGED__CP_CA_CERT_FILEOptional CA bundle file used to trust control-plane and etcd TLS connections.
AISIX_MANAGED__CP_CERT_PEMInline client certificate PEM used for mTLS with the AISIX Cloud control plane.
AISIX_MANAGED__CP_KEY_PEMInline private key PEM paired with the client certificate.
AISIX_MANAGED__CP_CA_PEMInline CA certificate PEM used as the trust anchor.
AISIX_MANAGED__CP_CERT_FILEFile path for the client certificate PEM.
AISIX_MANAGED__CP_KEY_FILEFile path for the private key PEM.
AISIX_MANAGED__CP_CA_FILEFile path for the CA certificate PEM.
AISIX_MANAGED__MTLS_DIRDirectory where the gateway persists the materialized mTLS bundle.
AISIX_MANAGED__DP_ID_FILEFile where the gateway persists its AISIX gateway ID.
AISIX_MANAGED__SNAPSHOT_CACHE_ENABLEDEnable the on-disk configuration snapshot cache. Defaults to false.
AISIX_MANAGED__SNAPSHOT_CACHE_PATHFile path for the on-disk snapshot cache when AISIX_MANAGED__SNAPSHOT_CACHE_ENABLED is true. A path alone does not enable the cache.
AISIX_MANAGED__HEARTBEAT_INTERVAL_SECSAISIX gateway heartbeat interval in seconds. Defaults to 15; values are clamped between 5 and 300.

Use either the inline PEM variables or the file-path variables for the certificate, key, and CA bundle. Do not mix inline and file variants for the same bundle.

For AISIX Cloud setup, see Connect an AISIX Gateway.