次の方法で共有

Azure Front Door 规则集服务器变量

Applies to: ✔️ Front Door Standard ✔️ Front Door Premium

Rule set server variables provide access to structured information about the request when you work with Rule sets.

当使用规则集匹配条件时,服务器变量可用作匹配条件,以便你可以识别具有特定属性的请求。

当使用规则集操作时,你可以使用服务器变量来动态更改请求和响应标头,以及重写 URL、路径和查询字符串(例如,在加载新页面或提交表单时)。

Note

服务器变量仅适用于 Azure Front Door 标准和高级层。

Supported variables

Variable name Description
socket_ip 与 Azure Front Door 边缘建立直接连接的 IP 地址。 如果客户端使用 HTTP 代理或负载均衡器来发送请求,则值 socket_ip 为该代理或负载均衡器的 IP 地址。
To access this server variable in a match condition, use Socket address.
client_ip 发出原始请求的客户端的 IP 地址。 如果请求中有 X-Forwarded-For 标头,则从标头中提取客户端 IP 地址。
To access this server variable in a match condition, use Remote address and configure the Operator to IP Match or IP Not Match.
client_port 发出请求的客户端的 IP 端口。
To access this server variable in a match condition, use Client port.
hostname 来自客户端的请求中的主机名。
To access this server variable in a match condition, use Host name.
geo_country 指示申请者所在的国家/地区(用国家/地区代码表示)。
To access this server variable in a match condition, use Remote address and configure the Operator to Geo Match or Geo Not Match.
http_method 用于发出 URL 请求的方法,如 GETPOST
To access this server variable in a match condition, use Request method.
http_version 请求协议。 通常为 HTTP/1.0HTTP/1.1HTTP/2.0
To access this server variable in a match condition, use HTTP version.
query_string 所请求的 URL 中 ? 后面的变量/值对列表。
例如,在请求 http://contoso.com:8080/article.aspx?id=123&title=fabrikam中,query_string 值为 id=123&title=fabrikam
To access this server variable in a match condition, use Query string.
request_scheme 请求方案:httphttps
To access this server variable in a match condition, use Request protocol.
request_uri 完整的原始请求 URI(带参数)。
例如,在请求 http://contoso.com:8080/article.aspx?id=123&title=fabrikam中,request_uri 值为 http://contoso.com:8080/article.aspx?id=123&title=fabrikam
To access this server variable in a match condition, use Request URL.
ssl_protocol 已建立的 TLS 连接的协议。
To access this server variable in a match condition, use SSL protocol.
server_port 接受请求的服务器端口。
To access this server variable in a match condition, use Server port.
url_path 标识 Web 客户端要访问的主机中的特定资源。 这是请求 URI 中没有参数或前导斜杠的部分。
例如,在请求 http://contoso.com:8080/article.aspx?id=123&title=fabrikam中,url_path 值为 article.aspx
Azure Front Door 支持使用 {url_path:seg#} 服务器变量动态捕获 URL 路径,并通过 {url_path.tolower}{url_path.toupper} 将 URL 路径转换为小写或大写。 有关详细信息,请参阅服务器变量格式服务器变量
To access this server variable in a match condition, use Request path condition.
http_req_header_<headername> 捕获请求头的值。 例如,对于请求标头设备:Desktop,变量为 http_req_header_Device,此变量的值为 Desktop。
变量语法中的标头名称支持字母数字和连字符(a-z、A-Z、0-9 和“-”)。
http_req_arg_<querystringkeyname> 从查询字符串键值对中捕获值。 例如,在请求 http://contoso.com:8080/article.aspx?id=123&title=fabrikam中,变量http_req_header_id,此变量的值为 123。
变量语法中的查询字符串键支持字母数字和连字符(a-z、A-Z、0-9 和“-”)。
http_resp_header_<headername> 从源捕获响应标头的值。 例如,对于响应头 Access-Control-Allow-Origin https://learn.microsoft.com,变量是 http_req_header_ 标头 Access-Control-Allow-Origin,此变量的值是 https://learn.microsoft.com
变量语法中的标头名称支持字母数字和连字符(a-z、A-Z、0-9 和“-”)。

服务器变量格式

使用规则集操作时,请使用以下格式指定服务器变量:

  • {variable}:加入整个服务器变量。 例如,如果客户端 IP 地址为 111.222.333.444,则 {client_ip} 令牌的计算结果将为 111.222.333.444
  • {variable:offset}:在指定的偏移量之后加入服务器变量,直至变量末尾。 偏移量从零开始。 例如,如果客户端 IP 地址为 111.222.333.444,则 {client_ip:3} 令牌的计算结果将为 .222.333.444
  • {variable:offset:length}:在指定的偏移量之后加入服务器变量,直至达到指定长度。 偏移量从零开始。 例如,当变量 var 为“AppId=01f592979c584d0f9d679db3e66a3e5e”时,例如
    • 偏移量在范围内,无长度:{var:0} = AppId=01f592979c584d0f9d679db3e66a3e5e, {var:6} = 01f592979c584d0f9d679db3e66a3e5e, {var:-8} = e66a3e5e
    • 偏移量在范围外,无长度:{var:-128} = AppId=01f592979c584d0f9d679db3e66a3e5e, {var:128} = null
    • 偏移量和长度都在范围内:{var:0:5} = AppId, {var:7:7} = 1f59297, {var:7:-7} = 1f592979c584d0f9d679db3e
    • 长度为零:{var:0:0} = null, {var:4:0} = null
    • 偏移量在范围内,长度在范围外:{var:0:100} = AppId=01f592979c584d0f9d679db3e66a3e5e, {var:5:100} = =01f592979c584d0f9d679db3e66a3e5e, {var:0:-48} = null, {var:4:-48} = null
    • 若要试验 {variable:offset:length} 的工作原理,请打开 Linux bash 终端或使用 bash 终端。 在终端中输入以下示例并检查输出,以了解子字符串提取的行为方式。
variable=helloworld123; echo ${variable:5} #Output = world123
variable=helloworld123; echo ${variable:0:5}  #Output = hello

Note

在 Bash 中,在参数扩展中的负数之前需要空格以避免语法错误。

variable=helloworld123; echo ${variable: -3:3} #Output=123 
variable=helloworld123; echo ${variable:5: -3} #Output = world
  • {url_path:seg#}:允许用户在 URL 重定向、URL 重写或任何有意义的操作中捕获和使用所需的 URL 路径段。 用户还可以使用与子字符串捕获 {url_path:seg1:3} 相同的样式来捕获多个段。 例如,对于源模式 /id/12345/default 和 URL 重写目标 /{url_path:seg1}/home,重写后的预期 URL 路径为 /12345/home。 对于多段捕获,当源模式为 /id/12345/default/location/test 时,URL 重写目标 /{url_path:seg1:3}/home 会导致 /12345/default/location/home。 段捕获包括位置路径,因此,如果路由为 /match/*,则段 0 将匹配。

    偏移量对应于起始段的索引,长度是指要捕获的段数,包括索引 = 偏移量处的段。

    假设偏移量和长度为正值,则以下逻辑适用:

    • 如果未包含长度,则捕获索引 = 偏移量处的段。
    • 如果包含长度,则捕获从索引 = 偏移量一直到索引 = 偏移量 + 长度之间的段。

    另外还会处理以下特殊情况:

    • 如果偏移量为负值,则从路径末尾向后计数以获取起始段。
    • 如果偏移量是大于等于段数的负值,则设置为 0。
    • 如果偏移量大于段数,则结果为空。
    • 如果长度为 0,则返回由偏移量指定的单个段
    • 如果长度为负值,则将其视为第二个偏移量,并从路径末尾向后计算。 如果该值小于偏移量,则会导致空字符串。
    • 如果长度大于段数,则返回路径中留下的内容。
  • {url_path.tolower} / {url_path.toupper}:将 URL 路径转换为小写或大写。 例如,URL 重写/重定向中 {url_path.tolower} 的目标 /lowercase/ABcDXyZ/EXAMPLE 会导致 /lowercase/abcdxyz/example{url_path.toupper} URL 重写/重定向中的目标 /ABcDXyZ/example 会导致 /ABCDXYZ/EXAMPLE

支持的规则集操作

以下规则集操作支持服务器变量:

Next steps