v2中文文档
项目

handle

评估一组指令,这些指令与同级嵌套的其他handle块相互排斥。

handle指令有点类似于nginx配置中的location指令:第一个匹配的handle块将被评估。如果需要,处理程序块可以嵌套。只有HTTP处理指令可以在处理块中使用。

语法

handle [<matcher>] {
	<directives...>
}
  • <directives...> 是一个HTTP处理指令或指令块的列表,每行一个,就像在handle块之外使用一样。

使用场景

  • 如果你喜欢用像nginx位置块那样的基于继承的方式来设计HTTP处理程序逻辑,你可能更喜欢使用handle块,而不是为你的指令定义相互排斥的匹配器。
  • 如果继承性是你的HTTP处理程序配置所需要的特征,那么handle指令可能很适合你。

类似的指令

还有其他一些指令可以包装HTTP处理程序指令,但每个指令都有其用途,这取决于你想要表达的行为。

  • handle_path的作用与handle相同, 但它在运行其处理程序之前从请求中剥离了一个前缀。
  • handle_errorshandle一样,但只有当Caddy在处理请求时遇到错误才会调用。
  • routehandle一样包装其他指令,但有两个区别:
    • 1)路由块之间不相互排斥,
    • 2)路由中的指令不重新排序,在需要时给你更多控制。

示例

由静态文件服务器处理/foo/中的请求,并将所有其他请求发送到反向代理。

handle /foo/* {
    file_server
}
handle {
    reverse_proxy 127.0.0.1:8080
}

你可以在同一个网站中混合使用handlehandle_path指令,它们仍然是相互排斥的。

handle_path /foo/* {
    # 路径有"/foo"前缀的将被去除
}

handle /bar/* {
    # 路径仍然保留了"/bar"
}