文档中心 CDN Pro 内置变量

内置变量

更新时间:2022-08-16 19:02:49

内置变量

下表列出了 CDN Pro 服务器支持的所有内置变量。您可以在边缘逻辑(Edge Logic)或均衡器逻辑 (Load Balancer Logic)中使用它们,但请注意并非所有变量都支持配置在这两个地方。实时日志支持与均衡器逻辑完全相同的变量集合。另外在下表中#标记表明该内置变量的值为数值类型。当您在控制台上编辑边缘逻辑或者实时日志时,如果输入$,系统的自动补齐功能将会为您列举出所有当前位置可支持的内置变量。

下表列出了 CDN Pro 服务器支持的所有内置变量。您可以在 边缘逻辑(Edge Logic)或 负载均衡器逻辑 (Load Balancer Logic)这两个位置中使用它们,但请注意并非所有变量都支持配置在这两个地方,下表为您描述了每个内置变量可使用的位置。另外,实时日志支持的变量集合与负载均衡器逻辑支持的变量集合是相同的,因此下表没有再单独列出来;在下表中,标记 # 表明该内置变量的值为数值类型。

内置变量列表

变量名称
描述
边缘逻辑
均衡器逻辑
$arg_name URL 问号后参数中的指定参数内容 Yes Yes
$args 请求 URL 中所有问号后参数内容 Yes Yes
$body_bytes_sent # 响应给客户端的文件 body 大小 No Yes
$bytes_sent # 响应给客户端的数据大小(包含 header ) No Yes
$cache_misc 添加到缓存 key 中的参数 Yes 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_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。 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 时,为空字符串;当 proxy_request_body_in_cache_key 被设为 on ,并且请求正文的哈希值被成功添加到了缓存key中,值为 0; 当 proxy_request_body_in_cache_key 被设为 on ,但是请求正文的哈希值未被添加到了缓存key中,值为 1(一般当请求正文大于4kB时会有这种情况)。 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 Yes
$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 中被使用时仅包含 Cache 层的执行消耗,不包含负载均衡层(Load Balancer) 的分发消耗),当在实时日志中被使用时仅包含负载均衡层的总执行消耗。单位为纳秒。 Yes Yes
$request_end_time # CDN Pro “全量” 接收来自客户端的请求并准备好处理/转发它所需的时间,单位为秒。同时支持毫秒单位的变量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 # 以毫秒为单位的请求处理时间,标记从客户端读取第一个字节以来经过的时间 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_address 边缘服务器的 IP 地址 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
$ssl_cpu_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

在边缘逻辑编写器上使用内置变量

当您在CDN Pro控制台界面上编写边缘逻辑时,如果输入’$’,系统的自动补齐功能将会为您列举出所有当前位置可支持的内置变量。

国内首份FinOps产业发展报告启动 ,网宿参编!

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!