文档
一个 项目

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
}