下表列出了 CDN Pro 服务器支持的所有内置变量。您可以在边缘逻辑(Edge Logic)或均衡器逻辑 (Load Balancer Logic)中使用它们,但请注意并非所有变量都支持配置在这两个地方。实时日志支持与均衡器逻辑完全相同的变量集合。表中的大多数变量都是只读的,只有那些标记为R/W的变量可写。表中的#标记表明该内置变量的值为数值类型。当您在控制台上编辑边缘逻辑或者实时日志时,如果输入$
,系统的自动补齐功能将会为您列举出所有当前位置可支持的内置变量。
变量名称 | 描述 | 边缘逻辑 | 均衡器逻辑 |
---|---|---|---|
$arg_name | URL 问号后参数中的指定参数内容 | Yes | Yes |
$args | 请求 URL 中所有问号后参数内容 | Yes | Yes |
$body_bytes_sent | # 响应给客户端的文件 body 大小 | No | Yes |
$bytes_sent | # 响应给客户端的数据大小(包含 header ) | No | Yes |
$cache_misc | 添加到缓存 key 中的参数 | R/W | No |
$client_country_code | 客户端的国家码(ISO 3166 格式) | Yes | Yes |
$client_http_version | 客户端请求的 HTTP 协议版本,例如 "HTTP/1.1" | Yes | Yes |
$client_ip_version | # 客户端IP 版本:4代表 IPv4 ;6代表 IPv6 | Yes | Yes |
$client_isp | 客户端的 ISP 运营商信息 | Yes | Yes |
$client_province_code | 客户端的中国城市代码 | Yes | Yes |
$client_real_ip | 客户端IP | Yes | Yes |
$connection_requests | # 本次连接中包含的请求次数 | No | Yes |
$content_code | 一个可写的变量,对内容赋予标志代码,用来在报表中对流量进行分类 | R/W | R/W |
$content_length | # 请求中 Content-Length 头部的值 | Yes | Yes |
$content_type | 请求中 Content-Type 头部的值 | Yes | Yes |
$cookie_name | 客户端请求中指定的 cookie 参数值。为了支持名称中包含小数点(.)的cookie,我们允许本变量名中出现该字符。这样在某些场合您会需要使用大括号{}来分隔本变量与紧跟其后的小数点符号。例如:$cookie_abc.test 和 ${cookie_abc.test} 都返回 abc.test 这个cookie的值,但是 ${cookie_abc}.test 将返回 abc 这个cookie的值外加“.test” 这个字符串 | Yes | Yes |
$dollar_sign | 代表 “$” 字段 | Yes | Yes |
$download_time | # CDN Pro从接收到客户请求到将响应正文发送到操作系统buffer的时间,其值为$request_end_time/$turn_around_time/$transfer_time 的总和,单位为秒。同时支持毫秒单位的变量download_times_ms。 $download_time的含义与另一个变量$request_time相同。 | No | Yes |
$error_code | 记录客户端与CDN,以及CDN与源站之间的异常信息 | No | Yes |
$extra_deliver_time_ms | # CDN Pro 将发送缓冲区的剩余数据传输完的大致时间,单位为毫秒 | No | Yes |
$host | 请求的 host 头部,和 $http_host 有相同含义 | Yes | Yes |
$hostname | CDN 服务器别名 | Yes | Yes |
$http_name | 客户端请求中指定的请求头参数值 | Yes | Yes |
$http_host | 请求的 host 头部,和 $host 有相同含义 | Yes | Yes |
$ignored_body_in_cache_key | 空字符串,当 proxy_request_body_in_cache_key 被设为 off , 或者 '0' 当请求正文的哈希值被加到了缓存key, 否则值为 '1'。 | Yes | No |
$invalid_referer | 用于标记请求 Referer 的合法性,如“ Referer ”被判定为合法则值为空 ; 否则值为 “1” | Yes | Yes |
$is_args | 当客户端请求携带问号后参数时,值为 "?" ;否则值为空 | Yes | Yes |
$msec | # 当前 Unix 时间戳,以秒为单位,精度到毫秒 | Yes | Yes |
$sec | # 当前 Unix 时间戳,精度到秒 | Yes | Yes |
$origin_host | 回源时携带的 host 头部值 | Yes | Yes |
$origin_ip | 源站 IP 和端口,格式为 IP:端口号 | Yes | Yes |
$origin_status_code | 回源状态码 | Yes | Yes |
$pid | CDN 进程 ID 号 | Yes | Yes |
$pipe | 如果请求属于“流水线”(pipelined),值为“p”,否则为“.” | No | Yes |
$property_ver | # 加速项版本号 | Yes | Yes |
$qtl_cpu_cycle | # LB7里全部,以及ES里传输响应正文之前的CPU时间,单位为纳秒(1e-9s) | No | Yes |
$qtl_req_id | 请求的唯一标识 ID | Yes | Yes |
$qtl_upstream_cache_status | 缓存状态: HIT, MISS, BYPASS, EXPIRED, STALE, UPDATING, REVALIDATED. | Yes | Yes |
$random_N | # 一个[0, N-1]之内均匀分布的随机整数,N范围是[2,1e9]。 | Yes | Yes |
$realtime_log_ds_factor | # 实时日志采样参数,值为 N 代表每N个请求会生产1条实时日志。可以通过写入这个变量来取代默认采样率。 | No | R/W |
$realtime_log_ds_ratio | # 实时日志采样率, $realtime_log_ds_factor 的倒数,值为介于0~1之间的小数。 | No | Yes |
$remote_user | 当使用基础鉴权时,从Authorization请求头中提取的用户名 | Yes | Yes |
$request | 完整的 http 请求行 | Yes | Yes |
$request_cpu_time | # 处理该请求时所消耗的CPU时间, 在Edge Logic 中被使用时仅包含 ES 层的执行消耗,当在 LB Logic 或实时日志中被使用时仅包含负载均衡层的总执行消耗。单位为纳秒。 | Yes | Yes |
$request_start_time | # CDN Pro接收到客户请求第一个字节的 Unix 时间戳,以秒为单位,精度到毫秒 | Yes | Yes |
$request_end_time | # 接收来自客户端的请求头并准备好处理/转发它所需的时间,单位为秒。同时支持毫秒单位的变量 request_end_time_ms。 | No | Yes |
$request_length | # 请求的长度 (包括请求的地址, http 请求头和请求主体) | Yes | Yes |
$request_method | HTTP 请求方法,例如 :GET, POST | Yes | Yes |
$request_scheme | 请求协议,值为"http" 或者 "https" | Yes | Yes |
$request_time | # 以毫秒为单位的请求处理时间,标记服务端从客户端读取第一个字节到发送最后一个字节给客户端所经过的时间。该时间等于$request_end_time,$turn_around_time和$transfer_time这3个变量的值之和。对于小请求,请求和响应通常各自一次发包完成。这种情况下,$request_end_time和$transfer_time的值为0,$request_time的值与$turn_around_time相同。 | Yes | Yes |
$request_uri | 从'/'开始,包含问号后参数的客户端请求 URI | Yes | Yes |
$sc_completed | # 如果本次请求的所有数据都已响应给客户端则值为1,否则值为0 | No | Yes |
$sc_initial | # 如果本次请求的第一个字节已响应给客户端则值为1,否则值为0 | No | Yes |
$sent_http_name | 响应给客户端的指定参数值 | No | Yes |
$sent_http_content_length | # 响应给客户端的Content-Length 头部值 | No | Yes |
$served_from_cache | # 如该请求在边缘的命中状态是 HIT ,则值是1;否则值为0 | Yes | Yes |
$server_addr | 边缘服务器的 IP 地址 | No | Yes |
$server_level | # 缓存服务器的层级。1代表边缘缓存,2代表父级缓存 | No | Yes |
$server_name | 加速项配置里匹配用户请求的加速域名 | Yes | Yes |
$server_region | 边缘服务器的国家代码,例如CN,US | Yes | Yes |
$server_protocol | HTTP/1.1 or HTTP/2.0 | No | Yes |
$service_port | # 接收请求的 CDN 边缘节点端口号 | Yes | Yes |
$sorted_querystring_args | 该变量以 ASCII 格式输出排序后的请求URL中的问号后参数内容,它可以通过该配置项进行修改 "sorted_querystring_filter_parameter" directive | Yes | Yes |
$ssl_cipher | 本次 SSL 请求中所使用的 TLS 加密套件 | No | Yes |
$request_ssl_handshake_time | # 处理该请求时,在 ssl 握手阶段所消耗的CPU时间,单位为纳秒 | No | Yes |
$ssl_protocol | SSL 握手协议, 例如"TLSv1.1" | No | Yes |
$ssl_server_name | TLS 中 SNI 携带的 servername | No | Yes |
$status | 响应给客户端的 HTTP 状态码 | Yes | Yes |
$tcpinfo_delivery_rate | # 客户端接收数据的速率,单位为 bytes/s | No | Yes |
$tcpinfo_min_rtt | # 本次请求中由 tcp 协议栈统计到的最小 RTT , 单位为微秒 | No | Yes |
$tcpinfo_rtt | # 本次请求中由 tcp 协议栈统计到的最后一次 RTT , 单位为微秒 | No | Yes |
$time_http | RFC 7231 格式下的当前系统时间,可用于响应中的 Date 头部值 | Yes | Yes |
$transfer_time | # CDN Pro 将完整的响应正文(直到最后一个字节)发送到系统缓冲区所需的时间,单位为秒。同时支持毫秒单位的变量transfer_time_ms。 | No | Yes |
$turn_around_time | # CDN Pro 从发出回源请求到接收源站响应的第一个字节所需的时间,单位为秒。同时支持毫秒单位的变量turn_around_time_ms。 | No | Yes |
$upstream_bytes_received | # 从中间层节点或者源站收到的回上层数据大小,单位为 bytes | Yes | No |
$upstream_bytes_sent | # 向中间层节点或者源站发送的请求数据大小,单位为 bytes | Yes | No |
$upstream_connect_time | # 向中间层或者源站发起请求时的建联时间,单位为毫秒 | Yes | No |
$upstream_cookie_name | 从中间层或者源站拿到的 cookie 值,通常该值会以" Set-Cookie "的形式传递,可能源自中间层的HIT已缓存数据。为了支持名称中包含小数点(.)的cookie,我们允许本变量名中出现该字符。这样在某些场合您会需要使用大括号{}来分隔本变量与紧跟其后的小数点符号。例如:$upstream_cookie_abc.test 和 ${upstream_cookie_abc.test} 都返回 abc.test 这个cookie的值,但是 ${upstream_cookie_abc}.test 将返回 abc 这个cookie的值外加“.test” 这个字符串 | Yes | Yes |
$upstream_header_time | # 从中间层或者源站请求数据时,接收响应 header 过程消耗的时间,单位为毫秒 | Yes | No |
$upstream_http_name | 从中间层或者源站拿到的响应头,可能源自中间层的 HIT 已缓存数据 | Yes | Yes |
$upstream_response_status | 从中间层或者源站拿到的响应状态码,如本请求没有发起回源则该变量值为0 | Yes | No |
$upstream_response_time | # 从中间层或者源站获取完整响应数据所消耗的时间,单位为毫秒 | Yes | No |
$upstream_server_type | 'O' 代表回源站; 'C' 代表回中间层节点. | Yes | No |
$upstream_trailer_name | 由上层添加的尾部(trailer) 值。通常该值会通过上层的add_trailer 指令设置 | No | Yes |
$uri | 归一化的请求 uri ,从'/'开始且不包含 query string 。其值会被边缘逻辑里的"rewrite"指令修改。 | Yes | Yes |