当使用 Caddy 作为应用层负载均衡时,Request Matcher
是一个非常有用的概念,它可以把请求分类后转发给后端。
比如本站就使用了这个特性,把api
、爬虫和路径带了raw
Query 参数等的流量转发到lln
,其它流量直接响应weblln
静态文件。
把 HTTP 请求流量分为了 4 类 (api, spider, raw, others),使用 path
匹配api
请求, 使用header_regexp
匹配爬虫, 使 用query
匹配 query 参数raw
。
前 3 类转发给 lln
后端,剩下的直接由 Caddy 作为 file server 响应 weblln
的静态网页。
Caddyfile 内容如下:
https://lowlevelnews.com {
@api {
path /i/* /o/* /v/*
}
@spider {
header_regexp User-Agent ^.*([Bb]ot|[Cc]rawler|[Ss]pider|curl|[Gg]oogle|[Bb]ing|[Yy]ahoo|[Bb]aidu).*$
}
@raw {
query raw=*
}
handle @api {
import cors *
reverse_proxy 127.0.0.1:8876
}
handle @spider {
reverse_proxy 127.0.0.1:8876
}
handle @raw {
reverse_proxy 127.0.0.1:8876
}
handle {
encode gzip
root * /usr/share/caddy/weblln
try_files {path} {path}/ /index.html
file_server
}
}
更 多 Matchers 请参考官方文档 https://caddyserver.com/docs/caddyfile/matchers