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
}