文档
一个 项目

intercept

reverse_proxy 指令中 响应拦截 功能的通用抽象。 这可以与任何生成响应的处理程序一起使用,包括来自插件的响应,例如 FrankenPHPphp_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.*} 来自原始响应的标头。

示例

当使用 FrankenPHPphp_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
}