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

#apache #node.js #virtualhost

#апач #node.js #virtualhost #apache

Вопрос:

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

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

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

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

Спасибо

Ответ №1:

 <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 /

Ответ №2:

если сокет.узел ввода-вывода запущен, обязательно включите также несколько модов 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

Ответ №3:

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

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

1. Есть хорошие node.js какие модули / расширения или руководства вы знаете для этого? Или, по крайней мере, подходящее ключевое слово для поиска?

2. Узловой http-прокси должен сделать свое дело.

Ответ №4:

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

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

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

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

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

Ответ №5:

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

Ответ №6:

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

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

Имя виртуального хоста *:80

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

Имя_сервера mynewsite.com Перенаправление (.*)http://localhost:3000 $1

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

1. Я знаю, что этому уже год… Это действительно работает? Я заметил, что этот ответ получил 0 голосов, и во всех других сообщениях говорится, что то, о чем просит OP, невозможно.