内置变量

变量形式

在使用变量的地方,使用${varName}来表示变量,比如:

  1. /${1}/hello${requestPath}?name=${arg.name}

匹配变量

匹配变量值的是有正则表达式的地方,使用匹配结果,通常为一个从0开始的数字,比如在重写规则中:

  1. /(\w+)/(\w+)

那么

  • ${0} - 表示整体匹配的内容
  • ${1} - 表示第一个括号匹配的内容
  • ${2} - 表示第二个括号匹配的内容可以使用(?i)来设置不区分大小写:
  1. (?i)/index.php

更多可用的正则表达式可以参考 RE2 Syntax

命名变量

也可以给变量设置一个名称:

  1. /(?P<myName>\w+)

然后就可以在待替换字符串中使用 ${myName}

  1. /hello/${myName}

请求相关变量

  • ${teaVersion} - TeaWeb版本
  • ${remoteAddr} - 客户端地址(IP),会依次根据X-Forwarded-For、X-Real-IP、RemoteAddr获取
  • ${rawRemoteAddr} - 客户端地址(IP),返回直接连接服务的客户端原始IP地址,从v0.1.3版本加入
  • ${remotePort} - 客户端端口
  • ${remoteUser} - 客户端用户名
  • ${requestURI} - 请求URI
  • ${requestPath} - 请求路径(不包括参数)
  • ${requestLength} - 请求内容长度
  • ${requestMethod} - 请求方法,比如GETPOST
  • ${requestFilename} - 请求文件路径
  • ${scheme} - 请求协议,httphttps
  • ${proto} - 包含版本的HTTP请求协议,类似于HTTP/1.0
  • ${timeISO8601} - ISO 8601格式的时间,比如2018-07-16T23:52:24.839+08:00
  • ${timeLocal} - 本地时间,比如17/Jul/2018:09:52:24 +0800
  • ${msec} - 带有毫秒的时间,比如1531756823.054
  • ${timestamp} - unix时间戳,单位为秒
  • ${host} - 主机名
  • ${serverName} - 接收请求的服务器名
  • ${serverPort} - 接收请求的服务器端口
  • ${referer} - 请求来源URL
  • ${userAgent} - 客户端信息
  • ${contentType} - 请求头部的Content-Type
  • ${cookies} - 所有cookie组合字符串
  • ${cookie.NAME} - 单个cookie值
  • ${args} - 所有参数组合字符串
  • ${arg.NAME} - 单个参数值
  • ${headers} - 所有Header信息组合字符串
  • ${header.NAME} - 单个Header值

响应相关变量

  • ${requestTime} - 请求花费时间
  • ${bytesSent} - 发送的内容长度,包括Header(字节)
  • ${bodyBytesSent} - 发送的内容长度,不包括Header(字节)
  • ${status} - 状态码,比如200
  • ${statusMessage} - 状态消息,比如200 OK

后端相关变量

  • ${backend.id} - 后端服务器ID,v0.0.9开始支持
  • ${backend.code} - 后端服务器代号,v0.0.9开始支持
  • ${backend.address} - 后端服务器地址,v0.0.9开始支持
  • ${backend.scheme} - 后端服务器协议,httphttps,v0.0.9开始支持

缓存相关变量

从v0.1.5开始,增加了一组缓存相关的变量:

  • ${cache.status} - 缓存状态,值可能为:
    • BYPASS - 没有开启缓存策略或者其他原因未通过缓存策略处理的时候,状态为BYPASS
    • HIT - 已命中缓存
    • MISS - 未命中缓存
    • PURGE - 正在清除缓存
  • ${cache.policy.name} - 缓存策略名称
  • ${cache.policy.type} - 缓存策略类型(memory、redis之类)

节点相关变量

从v0.1.4开始,可以在TeaWeb中设置集群信息。如果当前TeaWeb设置了节点信息,可以使用以下变量:

  • ${node.id} - 节点ID
  • ${node.name} - 节点名称
  • ${node.role} - 节点角色