你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Front Door 规则集服务器变量

当使用规则集时,规则集服务器变量可用于访问关于请求的结构化信息。

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

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

注意

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

支持的变量

变量名称 说明
socket_ip 与 Azure Front Door 边缘建立直接连接的 IP 地址。 如果客户端使用 HTTP 代理或负载均衡器来发送请求,则值 socket_ip 为该代理或负载均衡器的 IP 地址。
若要在匹配条件中访问此服务器变量,请使用套接字地址
client_ip 发出原始请求的客户端的 IP 地址。 如果请求中有 X-Forwarded-For 标头,则从标头中提取客户端 IP 地址。
若要在匹配条件中访问此服务器变量,请使用远程地址,并将“运算符”配置为“IP 匹配”或“IP 不匹配”。
client_port 发出请求的客户端的 IP 端口。
若要在匹配条件中访问此服务器变量,请使用客户端端口
hostname 来自客户端的请求中的主机名。
若要在匹配条件中访问此服务器变量,请使用主机名
geo_country 指示申请者所在的国家/地区(用国家/地区代码表示)。
若要在匹配条件中访问此服务器变量,请使用远程地址,并将“运算符”配置为“地理位置匹配”或“地理位置不匹配”。
http_method 用于发出 URL 请求的方法,如 GETPOST
若要在匹配条件中访问此服务器变量,请使用请求方法
http_version 请求协议。 通常为 HTTP/1.0HTTP/1.1HTTP/2.0
若要在匹配条件中访问此服务器变量,请使用 HTTP 版本
query_string 所请求的 URL 中 ? 后面的变量/值对列表。
例如,在请求 http://contoso.com:8080/article.aspx?id=123&title=fabrikam中,query_string 值为 id=123&title=fabrikam
若要在匹配条件中访问此服务器变量,请使用查询字符串
request_scheme 请求方案:httphttps
若要在匹配条件中访问此服务器变量,请使用请求协议
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
若要在匹配条件中访问此服务器变量,请使用请求 URL
ssl_protocol 已建立的 TLS 连接的协议。
若要在匹配条件中访问此服务器变量,请使用 SSL 协议
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 路径转换为小写或大写。 有关详细信息,请参阅服务器变量格式服务器变量
若要在匹配条件中访问此服务器变量,请使用请求路径条件。

服务器变量格式

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

  • {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
  • {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 重写/重定向中 /lowercase/ABcDXyZ/EXAMPLE 的目标 {url_path.tolower} 会导致 /lowercase/abcdxyz/example/ABcDXyZ/example URL 重写/重定向中的目标 {url_path.toupper} 会导致 /ABCDXYZ/EXAMPLE

支持的规则集操作

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

后续步骤