文件
贊助的專案

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
}