Отправить субдомен до node.js

Моя работа запускает несколько разных внутренних веб-приложений на сервере ubuntu (10.10), использующем apache. В настоящее время я разрабатываю другое веб-приложение, и серьезно рассматриваю возможность разработки поверх настраиваемого веб-сервера node.js. Мое рассуждение о желании сделать это:

  • Скорость/Масштабируемость
  • Безопасность. Страницы будут обслуживаться с помощью переключателя... case, а не просто обслуживать (потенциально вредоносного) пользователя, о чем они просят.
  • Простота настройки - мои намерения заключаются в том, что это проект с открытым исходным кодом, а node.js намного проще для пользователей, а не для работы с apache/IIS и т.д.

Мой вопрос: на сервере, где я получил apache, слушая порт 80, как я могу передать определенные поддомены в node.js. Я видел пару статей об использовании виртуальных хостов apache, чтобы удалить их, но это, похоже, лишает цель использования node.js. Если мне нужно пройти через apache, то все три причины моего отказа от apache/IIS аннулируются.

Я знаю, что могу использовать другой порт (: 8080?), но с точки зрения конечного пользователя это довольно запутанно, когда нужно вводить пользовательские порты. Любые альтернативные идеи?

Спасибо

Ответы

Ответ 1

Как делать другие вещи: привязать node к порту 80, обрабатывать трафик, нацеленный на субдомен, и использовать его как обратный прокси для apache для всего остального?

Ответ 3

Позвольте мне начать с нуля:

У вас есть DNS. И DNS-сервер отображает один DNS на один IP-адрес.

Затем на вашем компьютере выполняется apache, который прослушивает подключения на port 80 для http:// и на порту 443 для https://. http://example/ - это фактически запрос на http://example:80/.

Вы не можете использовать node.js для прослушивания на том же компьютере на том же порту, что и apache. Поэтому использование порта 8080 является жизнеспособным.

Вы также можете сопоставить субдомен с другим IP-адресом. Единственное предостережение здесь в том, что вам нужно иметь общедоступный IP-адрес.

Ответ 4

Вы не можете обслуживать порт 80 как из Apache, так и из node.js. Наличие Apache в качестве обратного прокси-сервера было бы не очень эффективным, и поэтому nginx популярен в этом сценарии. Другая альтернатива, чем обратный прокси на основе nginx, может быть такой, как Khez предложил сопоставить ваш поддомен с другим IP-адресом, который будет node.js program listen в или, возможно, использовать node.js как обратный прокси для Apache.

Ответ 5

if socket.io node работает, обязательно включите также несколько модов Apache:

  • прокси-сервер a2enmod
  • a2enmod proxy_balancer
  • a2enmod proxy_express
  • a2enmod proxy_http

в файле /etc/apache 2/sites-available/chat.example.com.conf


<VirtualHost *:80>
    ServerName chat.example.com

    <Location "/">
        ProxyPreserveHost On
        ProxyPass http://localhost:3000/
        ProxyPassReverse http://localhost:3000/
    </Location>
</VirtualHost>

тогда, конечно, service apache2 reload

Ответ 6

Вы можете настроить виртуальный хост в apache для своего нового сайта и добавить постоянный перенаправление внутри него к локальному хосту и порту, используемому node.js.

Вот как я это делаю на сервере с несколькими другими виртуальными хостами и моим приложением node.js, запущенным на порту 3000:

NameVirtualHost *: 80

[Другие виртуальные хосты опущены для краткости]

...

Имя_сервера mynewsite.com RedirectMatch (. *) http://localhost:3000 $1