Caddyfile中的指令可以有“匹配器”,将它们限制在特定的请求上。这样就可以为不同的路径提供不同的内容,但是当多个指令匹配相同的请求时会发生什么呢?
如果我想使用Caddy 2提供一个基本静态的网站,但将/api/区域转发到某些Node.js进程,那么我的Caddy文件可能如下所示:
fake-example.edge.app {
root * /var/www/example
reverse_proxy /api/* localhost:9000
file_server *
}对/api/user的请求将与file_server *和reverse_proxy /api/*匹配器相匹配,因此不清楚请求将传递到文件系统还是Node.js进程。
我在Caddy 2文档中找不到任何描述应该发生什么的东西。在我自己的测试中,结果似乎取决于指令在文件中显示的顺序,早期的条目“获胜”。会发生什么呢?如果它是“未定义的行为”,是否有更好的方法来编写这个文件以避免歧义?
发布于 2020-11-06 07:32:22
根据我的理解和经验,reverse_proxy优先,因为指令具有默认的隐式顺序:https://caddyserver.com/docs/caddyfile/directives#directive-order。
若要强制执行不同的顺序,您至少有三个选项:
route /api/* {
file_server
reverse_proxy localhost:9000
}order全局选项更改默认顺序handle之前与file_server一起使用reverse_proxy发布于 2020-08-19 12:45:57
根据我的理解和经验,更具体的考虑比更一般性的考虑。
例如,在您的示例中,任何匹配/API/的内容都应该转发到节点,其他任何内容都应该转发到普通的the服务器。
无论如何,只要/api/不是网站上的实际文件夹,访问该网站的请求就不重要了
https://serverfault.com/questions/1021924
复制相似问题