適用於: ✔️ Front Door Standard ✔️ Front Door Premium
當您使用規則集時,規則集伺服器變數可讓您存取要求的結構化資訊。
當您使用規則集比對條件時,伺服器變數可當作比對條件,讓您識別具有特定屬性的要求。
當您使用規則集動作時,您可以使用伺服器變數來動態變更要求和回應標頭,以及重寫 URL、路徑和查詢字串,例如載入新頁面或張貼表單時。
注意
伺服器變數僅適用於 Azure Front Door 標準和進階層。
支援的變數
| 變數名稱 | 描述 |
|---|---|
socket_ip |
Azure Front Door 邊緣的直接連線 IP 位址。 如果用戶端使用 HTTP Proxy 或負載平衡器來傳送要求,則 socket_ip 的值是 Proxy 或負載平衡器的 IP 位址。若要在比對條件中存取此伺服器變數,請使用通訊端位址。 |
client_ip |
發出原始要求的用戶端所在的 IP 位址。 如果要求中有 X-Forwarded-For 標頭,則會從標頭中挑選用戶端 IP 位址。若要在比對條件中存取此伺服器變數,請使用遠端位址,並將 [運算子] 設定為 [IP 符合] 或 [IP 不符合]。 |
client_port |
發出要求的用戶端的 IP 連接埠。 若要在比對條件中存取此伺服器變數,請使用用戶端連接埠。 |
hostname |
來自用戶端的要求中的主機名稱。 若要在比對條件中存取此伺服器變數,請使用主機名稱。 |
geo_country |
透過國碼/地區碼表示要求者起源的國家/地區。 若要在比對條件中存取此伺服器變數,請使用遠端位址,並將 [運算子] 設定為 [地區符合] 或 [地區不符合]。 |
http_method |
用來提出 URL 要求的方法,例如 GET 或 POST。若要在比對條件中存取此伺服器變數,請使用要求方法。 |
http_version |
要求通訊協定。 通常為 HTTP/1.0、HTTP/1.1 或 HTTP/2.0。若要在比對條件中存取此伺服器變數,請使用 HTTP 版本。 |
query_string |
接在所要求 URL 中「?」後面的變數/值組清單。例如,在要求 http://contoso.com:8080/article.aspx?id=123&title=fabrikam 中,query_string 值為 id=123&title=fabrikam。若要在比對條件中存取此伺服器變數,請使用查詢字串。 |
request_scheme |
要求配置:http 或 https。若要在比對條件中存取此伺服器變數,請使用要求通訊協定。 |
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 路徑轉換成小寫或大寫。 如需詳細資訊,請參閱 伺服器變數格式 和 伺服器變數。 若要在比對條件中存取此伺服器變數,請使用 要求路徑 條件。 |
http_req_header_<headername> |
擷取要求標頭的值。 例如,對於要求標頭 Device: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 終端機,或使用 Azure Cloud Shell 中的 bash 終端機。 在終端機中輸入下列範例,並檢查輸出以瞭解子字串擷取的運作方式。
- 位移在範圍內,沒有長度:
variable=helloworld123; echo ${variable:5} #Output = world123
variable=helloworld123; echo ${variable:0:5} #Output = hello
注意
在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_path:seg1}/home,重寫後的預期 URL 路徑為/12345/home。 針對多個區段擷取,當來源模式為/id/12345/default/location/test時,URL 重寫目的地/{url_path:seg1:3}/home會產生/12345/default/location/home。 區段擷取包含位置路徑,因此如果路由為/match/*,區段 0 將會相符。位移會對應到開始區段的索引,而長度是指要擷取多少個區段,包括位於 index = offset 的區段。
假設位移和長度為正數,則適用下列邏輯:
- 如果未包含 length,請擷取位於 index = offset 的區段。
- 包含 length 時,擷取區段從 index = offset up 直到 index = offset + length。
也會處理下列特殊案例:
- 如果 offset 為負數,則會從路徑結尾向後計算以取得起始區段。
- 如果 offset 是大於或等於區段數目的負值,請將 設定為 0。
- 如果 offset 大於區段數目,則結果會是空的。
- 如果 length 為 0,則會傳回位移所指定的單一區段
- 如果 length 為負數,請將它視為第二個位移,並從路徑結尾向後計算。 如果值小於位移,則會產生空字串。
- 如果 length 大於區段數目,則傳回路徑中保留的內容。
{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目的地。
支援的規則集動作
下列規則集動作支援伺服器變數:
下一步
- 深入了解 Azure Front Door 規則集。
- 深入了解規則集比對條件。
- 深入了解規則集動作。