Апач и узел.js на том же сервере
Я хочу использовать узел, потому что он swift, использует тот же язык, который я использую на стороне клиента, и он не блокируется по определению. Но парень, которого я нанял, чтобы написать программу обработки файла (сохранение, редактирование, переименование, загрузка, загрузка файлов, и т. д.), он хочет использовать Apache. Итак, я должен:
убедить его использовать узел (он дает мало земли на это)
выяснить, как загружать, скачивать, переименовывать, сохранять и т. д. файлы в узле или
Я должен установить apache и узел на одном сервере.
какая ситуация наиболее благоприятна, и как мне это реализовать?
9 ответов:
большой вопрос!
есть много веб-сайтов и бесплатных веб-приложений, реализованных на PHP, которые работают на Apache, многие люди используют его, чтобы вы могли размять что-то довольно простое и, кроме того, это простой способ обслуживания статического контента. Node-это быстрый, мощный, элегантный и сексуальный инструмент с необработанной мощностью V8 и плоским стеком без встроенных зависимостей.
Я также хочу легкость / гибкость Apache и все же ворчание и элегантность узла.JS, почему я не могу иметь как?
к счастью с 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-страниц:
теперь осталось только убедить вашу хостинг-компанию позволить вам работать с этой конфигурацией!!!
этот вопрос принадлежит больше на Ошибка Сервера но FWIW я бы сказал, что работает Apache перед узлом.js не является хорошим подходом в большинстве случаев.
ProxyPass Apache является удивительным для многих вещей (например, предоставление услуг на основе Tomcat как часть сайта), и если ваш узел.JS приложение просто делает определенную, небольшую роль или является внутренним инструментом, который, скорее всего, будет иметь ограниченное количество пользователей, тогда может быть проще просто использовать его, чтобы вы могли заставить его работать и двигаться дальше, но это не похоже на тот случай.
Если вы хотите воспользоваться преимуществами производительности и масштаба, которые вы получите от использования узла.js-и особенно если вы хотите использовать что - то, что включает в себя поддержание постоянного соединения, такого как веб-сокеты-вам лучше запускать как Apache, так и ваш узел.js на других портах (например, Apache на localhost:8080, Node.js на localhost: 3000) , а затем запускает что - то вроде nginx, лак или прокси HA спереди-и маршрутизирует трафик, который путь.
с чем-то вроде лака или nginx вы можете маршрутизировать трафик на основе пути и/или хоста. Они оба используют гораздо меньше системных ресурсов и гораздо более масштабируемы, чем с помощью Apache, чтобы сделать то же самое.
инструкции для запускаnode serverвдольapache2(v2.4.xx) server:
для передачи всех запросов по определенному URL-адресу на ваш узел.Приложения на JS создать внутри/etc/apache2/conf-availableкаталог, и добавить следующую строку в созданный файл:ProxyPass /node http://localhost:8000/измените 8000 на предпочтительный номер порта для
node server.
включить пользовательские конфигурации с помощью следующей команды:$> sudo a2enconf CUSTOMCUSTOM-это ваше вновь созданное имя файла без расширения, затем включите
proxy_httpС помощью команды:$> sudo a2enmod proxy_httpон должен включить как
proxyиproxy_httpмодули. Вы можете проверить, включен ли модуль или нет:$> sudo a2query -m MODULE_NAMEпосле включения конфигурации и модулей вам нужно будет перезапустить сервер apache:
$> sudo service apache2 restartтеперь вы можете выполнить узел сервера. Все запросы к
URL/nodeбудет обрабатываться сервером узла.
запуск узла и Apache на одном сервере является тривиальным, поскольку они не конфликтуют. NodeJS-это просто способ выполнения JavaScript на стороне сервера. Реальная дилемма исходит от доступа как к узлу, так и к Apache извне. Как я вижу у вас есть два варианта:
установите Apache для прокси-сервера всех соответствующих запросов к NodeJS, который будет выполнять загрузку файла и все остальное в узле.
есть Apache и узел на разных IP: комбинации портов (Если ваш сервер имеет два IP-адреса, то один может быть привязан к вашему узлу прослушивателя, другой к 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 service на порту 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. Даже если вам не нравится любое готовое решение, вы можете написать веб-приложение на PHP / Java / Python или mix n сопоставляют его с несколькими готовыми приложениями, и все они разработаны и поддерживаются для работы за одним экземпляром Apache.
пора сделать паузу и подумать о том, что я только что сказал.
теперь вы готовы принять решение о том, какой techstack вы собираетесь использовать. Если ваш сайт никогда не будет использовать ни одного из тысяч готовых приложений, которые требуют Apache, а затем перейти на узел в противном случае вы должны сначала устранить предположения, которые я заявил ранее.
в конце концов, ваш выбор techstack является более важным, чем любой отдельный компонент.
Я полностью согласен с @Straseus, что это относительно тривиально использовать узел.JS File system api для обработки загрузок и загрузок, но подумайте больше о том, что вы хотите от своего сайта в долгосрочной перспективе, а затем выберите свой techstack.
фреймворк Learning Node проще, чем изучение других фреймворков, но это не панацея. С чуть более усилие (которое само по себе может быть полезным), вы можете изучить любую другую структуру. Мы все учимся друг у друга, и вы будете более продуктивны, если вы работаете в небольшой команде, чем если вы работаете в одиночку, и ваши бэкэнд технические навыки также будут развиваться быстрее. Поэтому не стоит сбрасывать со счетов навыки других членов вашей команды так дешево.
этот пост около года и вероятность того, что вы уже решили, но я надеюсь, что моя тирада поможет следующий человек, который переживает подобное решение.
Спасибо за чтение.
вы можете установить оба на одном сервере, но они должны быть настроены на использование разных портов. Оба не могут использовать порт 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

Comments