Архитектура для определенных путей для запроса разных серверов

#node.js #api #express #nginx #architecture

#node.js #API #экспресс #nginx #архитектура

Вопрос:

Я создаю приложение с короткой ссылкой, такое как bit.ly с использованием стека MERN. Я хочу, чтобы статические страницы приложения размещались на отдельном сервере от API. Моя архитектура должна быть:

API:

ОПУБЛИКОВАТЬ example.com/link — создать короткую ссылку.
ПОСТАВИТЬ example.com/link:slug — обновить короткую ссылку.
ПОЛУЧИТЬ example.com/:slug — получить / перенаправить короткую ссылку на длинную ссылку.

Статический сайт:

ПОЛУЧИТЬ example.com — Домашнюю страницу.
ПОЛУЧИТЬ example.com/:slug-that-doesnt-exist — 404 страница.
ПОЛУЧИТЬ example.com/blog, example.com/docs, example.com/support etc. — Различные статические страницы

Проблема, с которой я сталкиваюсь, заключается в том, что сервер разграничивает два типа запросов к одному и тому же домену, часто по одному и тому же пути.

example.com/abc123 является ли API example.com/blog статическим сайтом, даже если экспресс-маршрутизатор example.com/:slug соответствует обоим. Чтобы усложнить, он example.com/zxy987 попадает в API, но не существует, поэтому необходимо перенаправить запрос на статический сервер. Я также не могу понять, как перенаправить сам запрос без изменения URL на другой сервер. Я рассматривал возможность использования NGINX, но, похоже, он не может обрабатывать example.com/:slug-that-doesnt-exist запросы типа, поскольку он не будет знать, существуют ли они во время его запуска.

Каков «лучший» способ подойти к этому?

Комментарии:

1. Есть ли причина, по которой они должны размещаться на отдельном сервере? Похоже, вы могли бы просто определить все в одном экземпляре, а затем определить все ваши статические маршруты до вашего slug.

2. @JasonRoman Основная причина в том, что я могу изменять свою домашнюю страницу, публиковать новые сообщения в блогах / документы и т. Д. без необходимости отправлять новую сборку на мой сервер API, что может привести к простою. Кроме того, это позволило бы мне масштабировать серверы независимо, поскольку с помощью приложения с короткой ссылкой оно, вероятно, получит больше вызовов перенаправления API, чем, скажем, сообщение в блоге.

3. Если это так, почему бы просто не определить свой API как api.example.com и иметь отдельную конфигурацию nginx? Затем вы можете сделать все, что я сказал выше, на своем основном сайте, а затем перенаправить любые фактические запросы slug на ваш сервер API, чтобы получить ответ перенаправления и перенаправить пользователя.