#apache #node.js #virtualhost
#апач #node.js #virtualhost #apache
Вопрос:
Моя работа запускает пару разных внутренних веб-приложений на сервере Ubuntu (10.10) под управлением apache. В настоящее время я разрабатываю другое веб-приложение и серьезно рассматриваю возможность разработки поверх пользовательского node.js веб-сервер. Мои доводы в пользу желания сделать это таковы:
- Скорость / масштабируемость
- Страницы безопасности будут обслуживаться с помощью switch …case, вместо того, чтобы просто предоставлять (потенциально вредоносному) пользователю все, что они запрашивают.
- Простота настройки — мои намерения заключаются в том, чтобы это был проект с открытым исходным кодом, и 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:
- прокси a2enmod
- a2enmod proxy_balancer
- a2enmod proxy_express
- 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, невозможно.