Маршрутизация запросов с использованием cloudflare к различным веб-приложениям

В настоящее время у меня есть два веб-приложения, настроенные в cloudflare со следующими CNAME. Оба являются приложениями keystonejs.

app1.example.com ===pointing to ===> AWS ALB 1
app2.example.com ===pointing to ===> AWS ALB 2

Я настроил Cloudflare Enterprise, поэтому я могу использовать функцию "Render Override" в правилах моей страницы. У меня есть двухстраничные правила, настроенные с использованием следующего:

www.example.com ===render override ===> app1.example.com
www.example.com/app2/* ===render override ===> app2.example.com

Теперь для доступа к приложению keystonejs на app2.example.com. Приложение вызывается с помощью app2.example.com/pa

Проблема, с которой я сталкиваюсь, состоит в том, что переопределение рендера не позволяет мне использовать подпути, и я не хочу использовать правило пересылки. Нужно ли мне сделать мое приложение keystone доступным через корневой URL, а именно app2.example.com/? или есть другой способ сделать это? В противном случае, мне нужно будет использовать обратный прокси-сервер? такие как nginx? Спасибо

1 ответ

Решение

Примечание. Поскольку вы являетесь корпоративным клиентом, я настоятельно рекомендую обратиться к своему менеджеру по работе с клиентами и / или инженеру по решениям в Cloudflare. Они там, чтобы помочь с именно такими вопросами. Тем не менее, я отвечу на вопрос здесь в интересах клиентов самообслуживания.

Я думаю, что когда вы говорите "Render Override", вы на самом деле имеете в виду "Resolve Override". Этот параметр изменяет DNS-запрос для запроса таким образом, что он направляется на другой исходный IP-адрес, чем обычно.

Обратите внимание, что Resolve Override не переписывает запрос каким-либо образом; он только направляет его на другой сервер. Итак, просьба www.example.com/app2/foo пойдет на сервер app2.example.com, но путь все равно будет /app2/foo (не /foo) и Host заголовок все равно будет Host: www.example.com,

Похоже, в вашем случае вы действительно хотите /app2/* быть переписан в /pa/* Кроме перенаправления на другое происхождение. Вы можете сделать это, используя Cloudflare Workers, который позволяет выполнять произвольный JavaScript на краю Cloudflare. Вот как может выглядеть скрипт:

addEventListener("fetch", event => {
  event.respondWith(handle(event.request));
});

async function handle(request) {
  let url = new URL(request.url)  // parse the URL

  if (url.pathname.startsWith("/app2/")) {
    // Override the target hostname.
    url.host = "app2.example.com"

    // Replace /app2/ with /pb/ in the path.
    url.pathname = "/pb/" + url.pathname.slice("/app2/".length)

    // Send the request on to origin.
    return fetch(url, request)
  } else {
    // Just override the hostname.
    url.host = "app1.example.com"

    // Send the request on to origin.
    return fetch(url, request)
  }
}

После этого вы можете удалить правила страницы Resolve Override, так как они теперь включены в рабочий скрипт.

Обратите внимание, что приведенный выше скрипт на самом деле переписывает Host заголовок в дополнение к пути. Если вы хотите Host заголовок, чтобы остаться как www.example.com, то вам нужно будет использовать cf.resolveOverride вариант. Это доступно только для корпоративных клиентов; спросите вашего CSM или SE, если вам нужна помощь в его использовании. Но в большинстве случаев вы действительно хотите Host заголовок должен быть переписан, так что вам, вероятно, это не нужно.

Другие вопросы по тегам