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

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

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

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

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

Спасибо


person jwegner    schedule 09.04.2011    source источник


Ответы (6)


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

person Adrien    schedule 09.04.2011
comment
Какие-нибудь хорошие модули/расширения или учебные пособия для node.js, которые вы знаете для этого? Или хотя бы хорошее ключевое слово для поиска? - person jwegner; 09.04.2011
comment
https://github.com/nodejitsu/node-http-proxy должен помочь. - person Adrien; 09.04.2011

<VirtualHost *:80>
ServerName subdomain.yourdomain.com
ProxyPreserveHost on
ProxyPass / http://localhost:8080/
</VirtualHost>

Благодаря http://www.chrisshiplet.com/2013/how-to-use-node-js-with-apache-on-port-80/

person piotr    schedule 05.11.2013

если узел socket.io запущен, обязательно включите несколько модов apache:

  1. прокси a2enmod
  2. a2enmod proxy_balancer
  3. a2enmod proxy_express
  4. a2enmod proxy_http

в файле /etc/apache2/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

person animaacija    schedule 21.08.2016

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

У вас есть DNS. И DNS-сервер сопоставляет один DNS с одним IP-адресом!

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

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

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

person Khez    schedule 09.04.2011

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

person yojimbo87    schedule 09.04.2011

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

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

NameVirtualHost *:80

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

...

ServerName mynewsite.com RedirectMatch (.*) http://localhost:3000$1

person Lloyd Moore    schedule 03.11.2011
comment
Я знаю, что этому уже год... Это действительно работает? Я заметил, что этот ответ получил 0 голосов, а все остальные сообщения говорят, что то, о чем просит OP, невозможно. - person Matt H.; 10.09.2012