跳到主要内容

环境变量

APISIX 支持在静态 配置文件 和某些插件中使用环境变量。有一些为特殊目的保留的环境变量,以及其他可以用自定义名称创建并引用的环境变量。

保留环境变量

APISIX 目前保留以下环境变量:

变量名描述
APISIX_DEPLOYMENT_ETCD_HOSTetcd 主机地址。
APISIX_PROFILE区分 配置文件 的部署环境。
APISIX_WORKER_PROCESSES工作进程的数量。

要使用这些配置,请在启动 APISIX 之前为环境变量赋值。

自定义环境变量

你可以在配置文件中和某些插件中使用自定义环境变量。

配置文件

在 APISIX 中,你可以在 config.yamlapisix.yaml 配置文件中使用环境变量来配置在部署期间应该可配置的值,使用 ${{ENV_VAR}} 语法或 ${{ENV_VAR:=default_value}} 语法。

以下示例在环境变量中设置客户端请求和 Admin API 的监听端口:

export APISIX_NODE_LISTEN=8132
export ADMIN_API_PORT=9232

config.yaml 中,按如下方式引用环境变量:

config.yaml
apisix:
node_listen:
- ${{APISIX_NODE_LISTEN}}
deployment:
admin:
admin_listen:
port: ${{ADMIN_API_PORT}}

启动后,APISIX 将监听端口 8132 用于客户端请求,监听端口 9232 用于 Admin API 请求。

你还可以配置默认值,以便在未设置环境变量时回退,例如:

config.yaml
apisix:
node_listen:
- ${{APISIX_NODE_LISTEN:=9080}}
deployment:
admin:
admin_listen:
port: ${{ADMIN_API_PORT:=9180}}

如果 APISIX 无法在环境中解析 APISIX_NODE_LISTENADMIN_API_PORT 的值,它将默认监听端口 9080 用于客户端请求,监听端口 9180 用于 Admin API 请求。

插件

APISIX 支持通过 NGINX env 指令 在插件配置中使用环境变量来获取机密信息,例如 Redis 密码身份验证密钥

以下示例演示了如何配置 key-auth 插件以从环境变量获取用户身份验证密钥。

将密钥的值保存到环境变量:

export JACK_AUTH_KEY=jack-key
提示

如果你在 Docker 中运行 APISIX,你应该在启动容器时使用 -e 标志设置环境变量。

创建消费者 jack

curl "http://127.0.0.1:9180/apisix/admin/consumers" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"username": "jack"
}'

为消费者配置 key-auth 凭证:

curl "http://127.0.0.1:9180/apisix/admin/consumers/jack/credentials" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"id": "cred-jack-key-auth",
"plugins": {
"key-auth": {
"key": "$env://JACK_AUTH_KEY"
}
}
}'

创建路由并启用 key-auth

curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"id": "key-auth-route",
"uri": "/anything",
"plugins": {
"key-auth": {}
},
"upstream" : {
"nodes": {
"httpbin.org": 1
}
}
}'

使用身份验证密钥向路由发送请求:

curl "http://127.0.0.1:9080/anything" -H 'apikey: jack-key'

你应该收到 HTTP/1.1 200 OK 响应。

有关插件中环境变量支持的更多信息,请参阅 插件文档