Отправить поддомен в node.js - PullRequest
18 голосов
/ 09 апреля 2011

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

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

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

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

Спасибо

Ответы [ 6 ]

22 голосов
/ 05 ноября 2013
<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/

5 голосов
/ 09 апреля 2011

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

4 голосов
/ 21 августа 2016

если работает узел 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

4 голосов
/ 09 апреля 2011

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

4 голосов
/ 09 апреля 2011

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

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

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

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

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

1 голос
/ 03 ноября 2011

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

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

NameVirtualHost *: 80

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

...

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

...