内置变量
APISIX 中的_内置变量_是预定义的变量,可以直接在配置中引用。它们通常用于插件配置、路由匹配和日志自定义。
APISIX 支持三种类型的内置变量:
- NGINX 变量
- APISIX 变量
- 自定义变量
这些变量按 给定的顺序 进行评估。
NGINX 变量
NGINX 提供了一组变量,可用于访问各种特定于请求的信息。
一些常用的变量包括:
upstream_addrremote_addrrequest_uriserver_nameurihttp_user_agent
有关更多信息,请参阅 NGINX 变量的完整列表。
APISIX 变量
除了 NGINX 变量 之外,APISIX 还提供了各种内置变量:
| 变量名 | 描述 |
|---|---|
post_arg_* | 当内容类型为 application/x-www-form-urlencoded 时的 HTTP POST 表单数据。星号将替换为 POST 表单数据的实际名称。 |
post_arg.* | 当内容类型为 application/json、application/x-www-form-urlencoded 或 multipart/form-data 时的 HTTP POST 正文参数。星号将替换为 POST 参数的实际名称。支持类似 JSON 路径的选择,例如 post_arg.model.version 和 post_arg.messages[*].content[*].type。 |
arg_* | URL 查询字符串。星号将替换为实际的查询参数名称。 |
uri_param_* | 当 APISIX 使用 radixtree_uri_with_parameter 路由器 时的 URL 参数。星号将替换为实际的查询参数名称。 |
http_* | HTTP 请求头。星号将替换为头的实际名称。 |
cookie_* | 请求 Cookie。星号将替换为 Cookie 的实际名称。 |
balancer_ip | 上游服务器 IP。 |
balancer_port | 上游服务器端口。 |
consumer_name | 消费者用户名。 |
consumer_group_id | 消费者组 ID。 |
graphql_name | GraphQL 操作名称。 |
graphql_operation | GraphQL 操作类型。 |
graphql_root_fields | GraphQL 根字段。 |
route_id | 路由 ID。 |
route_name | 路由名称。 |
service_id | 服务 ID。 |
service_name | 服务名称。 |
resp_body | HTTP 响应正文。 |
mqtt_client_id | MQTT 协议中的客户端 ID。 |
redis_cmd_line | Redis 命令行。 |
rpc_time | RPC 请求往返时间。 |
自定义变量
你还可以注册自己的变量并将它们用作内置变量。例如,你可以使用自定义变量来自定义日志插件中的日志格式,或将它们用作限流限速插件中的键。
示例
以下示例演示了注册自定义变量的两种方法,以及如何利用该变量从路由获取信息,随后将该信息记录到远程服务器。
创建服务
创建一个服务以配置 http-logger 插件和上游:
curl "http://127.0.0.1:9180/apisix/admin/services" -X PUT \
-H 'X-API-KEY: ${ADMIN_API_KEY}' \
-d '{
"id":"srv_custom_var",
"plugins": {
"http-logger": {
"uri": "'"${REMOTE_SERVER_ADDR}"'"
}
},
"upstream": {
"nodes": {
"httpbin.org:80": 1
}
}
}'