Apache и узлов.js на том же сервере

Я хочу использовать Node, потому что он swift, использует тот же язык, который я использую на стороне клиента, и он не блокируется по определению. Но парень, которого я нанял, чтобы написать программу для обработки файлов (сохранение, редактирование, переименование, загрузка, загрузка файлов и т. д.), он хочет использовать Apache. Итак, я должен:

  1. убедить его использовать Node (он отказывается от небольшой земли на этом)

  2. выясните, как загружать, загружать, переименовывать,сохранять и т. д. файлы в узле или

  3. Я должен установить apache и node на одном сервере.

какая ситуация является наиболее благоприятной, и как ее реализовать?

9 ответов


большой вопрос!

есть много веб-сайтов и бесплатных веб-приложений, реализованных в PHP, которые работают на Apache, многие люди используют его, так что вы можете размять что-то довольно легко и, кроме того, его нетрудно способ обслуживания статического контента. Node-быстрый, мощный, элегантный и сексуальный инструмент с необработанной мощностью V8 и плоским стеком без встроенных зависимостей.

Я также хочу легкость / гибкость Apache и все же ворчание и элегантность узла.Яш, почему я не могу иметь как?

к счастью с ProxyPass директива в Apache httpd.conf не слишком сложно передать все запросы по определенному URL-адресу на ваш узел.Приложения на JS.

ProxyPass /node http://localhost:8000

кроме того, убедитесь, что следующие строки не закомментированы, поэтому вы получаете правильный прокси и подмодуль для перенаправления http-запросов:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

затем запустите приложение узла на порту 8000!

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Apache!\n');
}).listen(8000, '127.0.0.1');

затем вы можете получить доступ ко всем Узел.Логика JS с использованием /node/ путь по вашему url, остальная часть веб-сайта может быть оставлена Apache для размещения существующих страниц PHP:

enter image description here

теперь единственное, что осталось, это убедить вашу хостинг-компанию позволить вам работать с этой конфигурацией!!!


этот вопрос принадлежит больше на Ошибка Сервера но FWIW я бы сказал, что запуск Apache перед узлом.js не является хорошим подходом в большинстве случаев.

ProxyPass Apache является удивительным для многих вещей (например, предоставление сервисов на основе Tomcat как части сайта), и если ваш узел.JS app просто выполняет определенную, небольшую роль или является внутренним инструментом, который, скорее всего, будет иметь ограниченное количество пользователей, тогда может быть проще просто использовать его, чтобы вы могли заставить его работать и двигаться дальше, но здесь это не похоже на дело.

Если вы хотите воспользоваться производительностью и масштабированием, вы получите от использования узла.js-и особенно если вы хотите использовать что - то, что включает в себя поддержание постоянного соединения, такого как веб-сокеты-вам лучше запускать Apache и ваш узел.js на других портах (например, Apache на localhost: 8080, Node.js на localhost: 3000), а затем запускает что-то вроде nginx, Varnish или ha proxy спереди - и маршрутизирует трафик, который путь.

с чем-то вроде лака или nginx вы можете маршрутизировать трафик на основе пути и/или хоста. Они оба используют гораздо меньше системных ресурсов и гораздо более масштабируемы, чем использование Apache для того же самого.



инструкции для запуска node server вдоль apache2(v2.4.xx) server:

для передачи всех запросов по определенному URL-адресу на ваш узел.JS приложение create внутри , и добавьте следующую строку в созданный файл:

ProxyPass /node http://localhost:8000/

измените 8000 на предпочтительный номер порта для node server.
включить пользовательские конфигурации со следующей командой:

$> sudo a2enconf CUSTOM

CUSTOM-это ваше недавно созданное имя файла без расширения, затем включите proxy_http С помощью команды:

$> sudo a2enmod proxy_http

он должен включить как proxy и proxy_http модули. Вы можете проверить, включен ли модуль или нет с помощью:

$> sudo a2query -m MODULE_NAME

после включения конфигурации и модулей необходимо перезапустить сервер apache:

$> sudo service apache2 restart

теперь вы можете выполнить node server. Все запросы к URL/node будет обрабатываться сервером узла.


запуск узла и Apache на одном сервере тривиален, поскольку они не конфликтуют. NodeJS-это просто способ выполнения JavaScript на стороне сервера. Настоящая дилемма исходит от доступа узла и Apache извне. Как я вижу у вас есть два варианта:

  1. настройте Apache для прокси-сервера все соответствующие запросы к NodeJS, которые будут выполнять загрузку файлов и все остальное в узле.

  2. имейте Apache и узел на разных комбинациях IP:port (если ваш сервер имеет два IPs, то один может быть привязан к вашему прослушивателю узла,другой к Apache).

Я также начинаю подозревать, что это может быть не то, что вы на самом деле ищете. Если ваша конечная цель-написать логику приложения в Nodejs и некоторую часть "обработка файлов", которую вы выгружаете подрядчику, то это действительно выбор языка, а не веб-сервер.


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

кулак вам нужно сделать apache работать на другом порту, кроме порта 80. например, порт 8080

затем вы можете написать обратный прокси-скрипт с nodejs как:

var proxy = require('redbird')({port: 80, xfwd: false);

proxy.register("mydomain.me/blog", "http://mydomain.me:8080/blog");
proxy.register("mydomain.me", "http://mydomain.me:3000");

в следующей статье описывается весь процесс создания этот.

http://wathmal.me/blog/run-apache-with-node-js-reverse-proxy/


ProxyPass /node http://localhost:8000/     
  • это сработало для меня, когда я сделал выше запись в httpd-vhosts.conf вместо httpd.conf
  • у меня установлен XAMPP над моей средой и хотел поразить весь трафик в apache на порту 80 с помощью NodeJS applicatin, работающего на порту 8080, т. е. http://localhost/[name_of_the_node_application]

Я искал ту же информацию. Наконец, нашел ответ по ссылке на ответ выше @Straseus

http://arguments.callee.info/2010/04/20/running-apache-and-node-js-together/

вот окончательное решение для запуска веб-сайта apache на порту 80, службы узла js на порту 8080 и использования .С. htaccess RewriteRule

в DocumentRoot веб-сайта apache добавьте следующее:

Options +FollowSymLinks -MultiViews

<IfModule mod_rewrite.c>

RewriteEngine on

# Simple URL redirect:
RewriteRule ^test.html$ http://arguments.callee.info:8000/test/ [P]

# More complicated (the user sees only "benchmark.html" in their address bar)
RewriteRule ^benchmark.html$ http://arguments.callee.info:8000/node?action=benchmark [P]

# Redirect a whole subdirectory:
RewriteRule ^node/(.*) http://arguments.callee.info:8000/ [P]

для перенаправление уровня каталога, ссылка выше (.+) правило, которое требует одного или нескольких символов после 'узел'. Мне пришлось преобразовать его в (.* ) который равен нулю или больше для моих вещей, чтобы работать.

большое спасибо за ссылку @Straseus


Я предполагаю, что вы делаете веб-приложение, потому что вы ссылаетесь на Apache и узлов. Быстрый ответ-Возможно ли-да. Рекомендуется ли - нет. Пакеты узлов это собственный веб-сервер, и большинство веб-сайтов работают на порту 80. Я также предполагаю, что в настоящее время нет плагина Apache, который поддерживается Nodejs, и я не уверен, что создание виртуального хоста-лучший способ реализовать это. Это вопросы, на которые должны ответить разработчики, которые поддерживают Nodejs, как хорошие люди в Joyent.

вместо портов, было бы лучше для оценки работы узла, который полностью отличается от большинства других, и поэтому я люблю его, но он также включает в себя несколько компромиссов, которые вы должны знать заранее.

ваш пример похож на CMS или веб-приложение для обмена, и есть сотни из доступных приложений, которые будут работать на Apache. Даже если вам не нравится какое-либо готовое решение, вы можете написать webapp в PHP / Java / Python или mix N сопоставьте его с несколькими готовыми приложениями, и все они разработаны и поддерживаются для работы за одним экземпляром Apache.

пора сделать паузу и подумать о том, что я только что сказал.

теперь вы готовы принять решение о том, какой techstack вы собираетесь использовать. Если ваш сайт никогда не будет использовать любой из тысяч готовых приложений, которые требуют Apache, а затем перейти на узел в противном случае вы должны сначала устранить предположения, которые я заявил ранее.

в конце концов, ваш выбор techstack является более важным, чем любой отдельный компонент.

Я полностью согласен с @Straseus, что относительно тривиально использовать node.JS file system api для обработки загрузок и загрузок, но подумайте больше о том, что вы хотите от вашего сайта в долгосрочной перспективе, а затем выберите techstack.

структура обучающего узла проще, чем изучение других фреймворков, но это не панацея. С немного больше усилие (которое само по себе может быть полезным), вы также можете изучить любую другую структуру. Мы все учимся друг у друга и вы будете более продуктивным, если вы работаете в маленькой команде, чем если вы работаете в одиночку и внутренние технические навыки будут развиваться быстрее. Поэтому не стоит так дешево сбрасывать со счетов навыки других членов вашей команды.

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

Спасибо за чтение.


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

имейте в виду, что Apache является сервером, а nodeJS-языком.

вы пробовали гуглить проблему, прежде чем спрашивать здесь?

http://arguments.callee.info/2010/04/20/running-apache-and-node-js-together/

что мне нужно для запуска узла.сценарий js на моем сервер?

http://www.readwriteweb.com/hack/2010/12/how-to-run-apache-and-nodejs.php

http://eastmond.org/blog/?p=45