Назад | Перейти на главную страницу

Какой сопоставитель выберет Кэдди в случае конфликта?

Директивы в 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