Бэкэнд и Frontend на том же порту

Вопрос: У меня есть экземпляр ec2 Windows на AWS, который отвечает интерфейсом на порту 80. Мой сервер работает на порту 5000. Есть ли способ, которым я могу разместить как интерфейс, так и бэкэнд на одном и том же порту, не используя какой-либо порт на клиенте для остальных API? Внешний интерфейс: www.example.com Текущий бэкэнд: www.example.com:5000 Что

Вопрос:

У меня есть экземпляр ec2 Windows на AWS, который отвечает интерфейсом на порту 80. Мой сервер работает на порту 5000. Есть ли способ, которым я могу разместить как интерфейс, так и бэкэнд на одном и том же порту, не используя какой-либо порт на клиенте для остальных API?

Внешний интерфейс:

www.example.com

Текущий бэкэнд:

www.example.com:5000

Что бы я хотел:

www.example.com/backend/

Как мне написать один файл index.js или server.js для обоих бэкэнд и Frontend-маршрутов?

Лучший ответ:

Несомненно, тривиально размещать как на одном и том же порту (-ах), это просто вопрос маршрутизации.

Например, используя express.js и статические файлы (CSS, изображения, HTML и т.д.) В папке с именем public:

const express = require(‘express’) const app = express() app.use(‘/’, express.static(‘public’)) app.get(‘/backend’, (req, res) => res.send(‘Hello World!’)) app.listen(80, () => console.log(‘Example app listening on port 80!’))

Если вы создадите файл public/index.html:

<html>HI</html>

Затем вы можете получить его (“frontend”), запустив curl ‘localhost:80/’:

$ curl ‘localhost:80/’ <html>HI</html> $

Вы также можете получить доступ к своим “бэкэндам”:

$ curl ‘localhost:80/backend’ Hello World! $ Ответ №1Содержание

  1. Я рекомендую вам разделить свои конечные точки обслуживания в субдоменах
  2. Конечная точка обслуживания
  3. Для вашей конечной точки Frontend рекомендуемый субдомен:
  4. Для конечной точки Backend вы можете использовать все, что хотите, но рекомендуемые субдомены для Backend:
  5. Итак, в вашем случае рекомендации:
  6. Первый подход
  7. Второй подход

Я рекомендую вам разделить свои конечные точки обслуживания в субдоменах

Конечная точка обслуживания

Конечная точка – это точка подключения, в которой отображаются файлы HTML или активные серверные страницы. Конечные точки предоставляют информацию, необходимую для решения конечной точки веб-службы. Конечная точка предоставляет ссылку или спецификацию, которая используется для определения группы или семейства свойств адресации сообщений и предоставляет сквозные характеристики сообщений, такие как ссылки для источника и назначения конечных точек, а также идентификационные сообщения, позволяющие единообразно адресация “независимых” сообщений. Конечной точкой может быть терминал ПК, КПК или точка доступа. Ссылка: определение конечной точки обслуживания.

Для вашей конечной точки Frontend рекомендуемый субдомен:

  • http://www.example.com
  • http://example.com Для этого случая вам нужно перенаправить на субдомен www

Для конечной точки Backend вы можете использовать все, что хотите, но рекомендуемые субдомены для Backend:

  • (наиболее часто используемый)

Итак, в вашем случае рекомендации:

Вы можете выполнить это, используя либо обратный прокси, как Nginx, либо получение субдомена из объекта запроса в NodeJ.

Nginx – это веб-сервер, который также может использоваться как обратный прокси, балансировщик нагрузки и HTTP-кеш. Программное обеспечение было создано Игорем Сысоевым и впервые было опубликовано в 2004 году. Одноименная компания была основана в 2011 году для поддержки.

Первый подход

Использование Nginx в качестве загрузчика нагрузки HTTP

Вы можете настроить Nginx для баланса запросов на ваш сервер следующим образом:

http { upstream backend { server localhost:5000; } upstream frontend { server localhost; } server { listen 80; server_name api.example.com; location / { proxy_pass http://backend; } } server { listen 80; server_name www.example.com example.com; location / { proxy_pass http://frontend; } } }

Второй подход

Используйте expressjs для получения субдомена из объекта запроса.

req.subdomains

Массив поддоменов в доменном имени запроса.

Документация:

// Host: «tobi.ferrets.example.com» req.subdomains // => [«ferrets», «tobi»]

В вашем случае ваши возможные субдомены: www или api

// Host: «www.example.com» req.subdomains // => [«www»]

Или же

// Host: «api.example.com» req.subdomains // => [«api»]

Вот как вы должны обрабатывать запрос в своем server.js

var subDomain = req.subdomains[0]; if (subdomain === ‘api’) { processBackendRequest(); } else { processFrontendRequest(); } Ответ №2

Единственный реальный способ предотвратить указание номера порта – использовать пост 80 для HTTP или 443 для HTTPS.

Если вы используете IIS, вы можете использовать свой интерфейс на веб-сайте под названием example.com, а затем на этом веб-сайте есть еще одно “приложение”, называемое “backend”.

Все HTTP-запросы на www.example.com перейдут на корневой сайт. Запросы на www.example.com/backend будут направлены на “бэкэнд-приложение” на веб-сайте example.com.

ServerFault может быть более подходящим местом, чтобы задавать вопросы IIS.

Оцените статью
Добавить комментарий