Директивы в Caddyfile могут иметь «сопоставители», которые ограничивают их конкретными запросами. Это позволяет Caddy 2 обслуживать разный контент по разным путям, но что происходит, когда несколько директив соответствуют одному и тому же запросу?
Если я хочу обслуживать статичный веб-сайт с помощью Caddy 2, но пересылаю /api/
в какой-то процесс Node.js мой Caddyfile может выглядеть так:
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 ничего, что описывало бы, что должно произойти. В моем собственном тестировании результаты, похоже, зависят от порядка, в котором директивы появляются в файле, причем более ранние записи «выигрывают». Что должно произойти? Если это «неопределенное поведение», есть ли лучший способ записать этот файл, чтобы избежать двусмысленности?
Исходя из моего понимания и опыта, более конкретные принимаются во внимание, а не более общие.
Например, в вашем случае все, что соответствует / API /, должно быть перенаправлено на узел, а все остальное - на обычный веб-сервер.
В любом случае, пока / api / не является реальной папкой на веб-сайте, запросы, попадающие на веб-сайт, не имеют значения.
Также см: https://caddyserver.com/docs/caddyfile/directives/root