Разместить несколько мобильных приложений на одном узловом сервере?

#ios #node.js #mobile #centos #port

#iOS #node.js #Мобильный #centos #порт

Вопрос:

Я настраивал свой CentOS VPS для размещения различных сервисов для мобильных приложений с помощью node.js .

Со всеми моими исследованиями я уверен, что теперь мне удастся развернуть node.js сервер для одного приложения, но как мне разделить мои службы на сервере, которые все проходят через порт 80?

Я думал об использовании разных портов для каждого приложения, поэтому порт 3000 будет mobileApp1, порт 30001 будет mobileApp2, но после прочтения нескольких сообщений я пришел к выводу, что это плохая идея. В первую очередь потому, что большинство брандмауэров настроены на разрешение подключений к порту 80, и в конечном итоге я могу захотеть создавать сайты, которые используют те же веб-службы, что и мобильные клиенты.

Я нашел сайт, который рекомендовал использовать прокси-сервер следующим образом:

     var http = require('http')
, httpProxy = require('http-proxy');

httpProxy.createServer({
  hostnameOnly: true,
  router: {
    //web-development.cc
    'www.my-domain.com': '127.0.0.1:3001',
    'www.my-other-domain.de' : '127.0.0.1:3002'
  }
}).listen(80);
  

Как я могу поддерживать различные веб-службы, которые могут вызываться либо из мобильных приложений, либо с одной из моих веб-страниц, и все это проходит через порт 80?

Ответ №1:

Да, вы можете использовать node в качестве прокси-сервера и запускать его на порту 80, маршрутизируя запросы на основе URL-адреса к различным приложениям узла, или вы можете запустить веб-сервер на порту 80 и перенаправить запросы к вашим узловым приложениям. В узле есть много вариантов прокси, поэтому отсюда будет больше мнений о том, что вам следует использовать. Один из вариантов, с которым я добился успеха, — это веб-платформа Hapi, которую Walmart использовал для маршрутизации запросов на свои серверы приложений. Вот некоторая документация о том, как они использовали Hapi для прокси-запросов.

Другой, возможно, более используемый вариант — использовать веб-сервер, такой как Apache или Nginx, на порту 80 (и 443) и направлять запросы на ваши серверы приложений на основе URL-адресов. Существует много документации о том, как это настроить, поскольку многие люди делают это для маршрутизации запросов. Я собрал суть, чтобы помочь запомнить, как настроить простой сервер nginx для маршрутизации запросов на основе домена в отдельные узловые приложения, которые вы можете найти здесь: https://gist.github.com/dylants/8609050 . (Обратите внимание, что gist ожидает, что SSL будет включен для этих подключений, но, надеюсь, это даст вам представление.)

Но на высоком уровне нормально (и вполне нормально) запускать несколько узловых приложений на одном компьютере на разных портах (моя суть, которую я вставил, предназначена для среды, которая это делает). Затем вы можете ограничить доступ к внешнему миру на этих портах (скажем, 3000, 3001, 3002 и т. Д.) И Разрешить доступ только к портам 80 и 443. Затем ваш веб-сервер работает на портах 80 и 443 и направляет запросы к этим узловым приложениям, работающим на портах 3000, 3001 и т. Д.

Преимущество использования этих веб-серверов в том, что они действительно просты, как только вы понимаете основы, и после этого запускаются без особого обслуживания. Возможно, сначала вам придется провести небольшое исследование, но в конечном итоге оно того стоит. Надеюсь, это поможет 🙂

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

1. @dylants итак, допустим, у меня есть два приложения, запущенных на одном сервере. Приложение 1 goes начинает использовать код синхронизации и блокирует основной поток. Приложение 2 также блокируется?

2. @vernak2539 Я не уверен, что вы подразумеваете под блокировкой основного потока, если это отдельные приложения, у них должны быть отдельные контексты / потоки. Возможно, вы захотите задать отдельный вопрос, чтобы предоставить более подробную информацию, но, вообще говоря, отдельные приложения не блокируют друг друга, поскольку у них отдельный код.