intercept
reverse_proxy
指令中 回應攔截 功能的通用抽象化。這可以與任何產生回應的處理程序一起使用,包括來自外掛程式(如 FrankenPHP 的 php_server
)的處理程序。
此指令允許您匹配回應,並且將調用第一個匹配的 handle_response
路由或 replace_status
。調用時,原始回應本文會被保留,讓該路由有機會編寫不同的回應本文,包含新的狀態碼或任何必要的回應標頭操作。如果路由沒有編寫新的回應本文,則會改為寫入原始回應本文。
語法
intercept [<matcher>] {
@name {
status <code...>
header <field> [<value>]
}
replace_status [<matcher>] <code>
handle_response [<matcher>] {
<directives...>
}
}
-
@name 是一個回應匹配器的名稱。只要每個回應匹配器都有唯一的名稱,就可以定義多個匹配器。可以在狀態碼以及回應標頭的存在或值上匹配回應。
-
replace_status 僅在給定匹配器匹配時更改回應的狀態碼。
-
handle_response 定義在給定匹配器(或,如果省略匹配器,則為所有回應)匹配時要執行的路由。將應用第一個匹配的區塊。在
handle_response
區塊內,可以使用任何其他指令。
在 handle_response
路由中,以下佔位符可用於從原始回應中提取資訊
-
{resp.status_code}
原始回應的狀態碼。 -
{resp.header.*}
來自原始回應的標頭。
範例
當使用 FrankenPHP 的 php_server
時,您可以使用 intercept
來實作 X-Accel-Redirect
支援,以提供 PHP 應用程式請求的靜態檔案
localhost {
root * /srv
intercept {
@accel header X-Accel-Redirect *
handle_response @accel {
root * /path/to/private/files
rewrite {resp.header.X-Accel-Redirect}
method GET
file_server
}
}
php_server
}