Apache i Node.js na tym samym serwerze

Chcę używać Node, ponieważ jest szybki, używa tego samego języka, którego używam po stronie klienta, i nie jest blokowany z definicji. Ale facet, którego zatrudniłem do napisania programu do obsługi plików(Zapisywanie, edycja, zmiana nazwy, pobieranie, przesyłanie plików, itp.), chce używać apache. Więc muszę:

  1. Przekonaj go do użycia Node (rezygnuje z małej ziemi na tym)

  2. Dowiedz się, jak przesłać, pobrać, zmienić nazwę, zapisać itp. pliki w węźle lub

  3. Muszę zainstalować apache i node na tym samym serwerze.

Która sytuacja jest najkorzystniejsza i jak ją wdrożyć?

Author: Michael Irigoyen, 2012-03-23

9 answers

Świetne pytanie!

Istnieje wiele stron internetowych i darmowych aplikacji internetowych zaimplementowanych w PHP, które działają na Apache, Wiele osób z niego korzysta, dzięki czemu można mash up coś dość łatwe, a poza tym, nie ma się nad czym zastanawiać sposób serwowania statycznych treści. Node jest szybkim, potężnym, eleganckim i seksownym narzędziem z surową mocą V8 i płaskim stosem bez wbudowanych zależności.

Chcę również łatwości / elastyczności Apache, a jednocześnie chrząkania i elegancji Node.JS, dlaczego nie mogę mieć obie ?

Na szczęście z dyrektywą ProxyPass w Apache httpd.conf nie jest zbyt trudne przekierowanie wszystkich żądań na konkretny adres URL do Twojego węzła.Aplikacja JS.

ProxyPass /node http://localhost:8000

Upewnij się również, że następujące linie nie są komentowane, aby uzyskać odpowiedni proxy i podmodule do przekierowywania żądań http:

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

Następnie uruchom aplikację węzła na porcie 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');

Wtedy możesz uzyskać dostęp do wszystkich węzłów.Js logic używając ścieżki /node/ na twoim adresie url, reszta strony może pozostaw do Apache, aby hostować istniejące strony PHP:

Tutaj wpisz opis obrazka

Teraz jedyne, co pozostało, to przekonanie Twojej firmy hostingowej, pozwól jej biegać z tą konfiguracją!!!

 627
Author: Steven de Salas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-30 23:33:16

To pytanie należy bardziej do Błąd serwera ale FWIW powiedziałbym uruchamianie Apache ' a przed węzłem.js nie jest dobrym podejściem w większości przypadków.

ProxyPass Apache ' a jest świetny do wielu rzeczy (takich jak ujawnianie usług opartych na Tomcat jako części witryny) i jeśli Twój węzeł.aplikacja js po prostu wykonuje określoną, małą rolę lub jest wewnętrznym narzędziem, które może mieć tylko ograniczoną liczbę użytkowników, a następnie może być łatwiejsze po prostu z niego korzystać, dzięki czemu można go uruchomić i przejść dalej, ale to nie brzmi jak sprawa tutaj.

Jeśli chcesz skorzystać z wydajności i skali, jaką uzyskasz dzięki Node.js-a zwłaszcza jeśli chcesz użyć czegoś, co wymaga utrzymywania trwałego połączenia, takiego jak gniazda sieciowe - lepiej będzie uruchomić zarówno Apache, jak i węzeł.js na innych portach (np. Apache na localhost: 8080, Node.js na localhost: 3000), a następnie uruchamianie czegoś takiego jak nginx, Varnish lub ha proxy z przodu - i przekierowywanie ruchu w ten sposób.

Z czymś podobnie jak varnish lub nginx możesz kierować ruch na podstawie ścieżki i / lub hosta. Oba używają znacznie mniej zasobów systemowych i są znacznie bardziej skalowalne niż używanie Apache do tego samego.

 46
Author: Iain Collins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-17 12:34:50


instrukcja uruchomienia node server wzdłuż apache2(v2.4.xx) server:

w celu przekierowania wszystkich żądań na konkretny adres URL do Twojego węzła.Aplikacja js tworzy plik CUSTOM.conf w katalogu /etc/apache2/conf-available i dodaje następującą linię do utworzonego pliku:

ProxyPass /node http://localhost:8000/

Zmień 8000 na preferowany numer portu dla node server.
Włącz niestandardowe konfiguracje za pomocą następującego polecenia:

$> sudo a2enconf CUSTOM

CUSTOM to nowo utworzona nazwa pliku bez rozszerzenia, następnie włącz proxy_http poleceniem:

$> sudo a2enmod proxy_http

It powinien włączyć zarówno moduły proxy jak i proxy_http. Możesz sprawdzić, czy moduł jest włączony, czy nie:

$> sudo a2query -m MODULE_NAME

Po włączeniu konfiguracji i modułów, będziesz musiał ponownie uruchomić serwer apache:

$> sudo service apache2 restart

Teraz możesz uruchomić node server. Wszystkie żądania do URL/node będą obsługiwane przez serwer węzła.

 24
Author: krmld,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-20 09:50:58

Uruchamianie Node i Apache na jednym serwerze jest trywialne, ponieważ nie kolidują. NodeJS jest tylko sposobem na wykonanie JavaScript server side. Prawdziwym dylematem jest dostęp zarówno do Node, jak i Apache z zewnątrz. Jak widzę masz dwa wyjścia:

  1. Skonfiguruj Apache do proxy wszystkich pasujących żądań do NodeJS, który zrobi Przesyłanie pliku i cokolwiek innego w node.

  2. Mieć Apache i Node na różnych kombinacjach IP: port (jeśli twój serwer ma dwa IP, to można być przywiązany do słuchacza węzłów, drugi do Apache).

Zaczynam też podejrzewać, że to może nie być to, czego tak naprawdę szukasz. Jeśli twoim celem końcowym jest napisanie logiki aplikacji w Nodejs i jakiejś części "obsługi plików", którą załadujesz do Wykonawcy, To naprawdę wybór języka, a nie serwera www.

 13
Author: Yarek T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-19 19:01:17

Możesz użyć innego podejścia, takiego jak pisanie serwera odwrotnego proxy z nodejs do proxy zarówno apache, jak i wszystkich innych aplikacji nodejs.

Fist musisz uruchomić apache na innym porcie niż port 80. ex: port 8080

Następnie możesz napisać skrypt odwrotnego proxy z nodejs jako:

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");

Poniższy artykuł opisuje cały proces tworzenia tego.

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

 7
Author: wathmal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-22 08:37:39
ProxyPass /node http://localhost:8000/     
  • to działało dla mnie, gdy zrobiłem powyższy wpis w httpd-vhosts.conf zamiast httpd.conf
  • mam zainstalowany XAMPP w moim środowisku i chciałem uderzyć cały ruch w apache na porcie 80 z NodeJS applicatin działa na porcie 8080 TJ http://localhost/[name_of_the_node_application]
 0
Author: rahul shukla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-08 05:46:11

Szukałam tych samych informacji. W końcu znalazłem odpowiedź z linku na odpowiedź powyżej przez @Straseus

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

Oto ostateczne rozwiązanie, aby uruchomić stronę apache na porcie 80, usługę node js na porcie 8080 i użyć .htaccess RewriteRule

W DocumentRoot witryny apache, dodaj następujące:

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/$1 [P]

Dla przekierowania z poziomu katalogu, link powyżej zasugerowano (.+ ) reguła, która wymaga jednego lub więcej znaków po ' node/'. Musiałem to przerobić na (.* ) czyli zero lub więcej dla moich rzeczy do pracy.

Wielkie dzięki za link @ Straseus

 -1
Author: pd1980,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-12 00:30:34

Zakładam, że tworzysz aplikację internetową, ponieważ odnosisz się do Apache i Node. Szybka odpowiedź - czy to możliwe-tak. Czy jest to zalecane-nie. Node bundles to własny serwer WWW, a większość stron internetowych działa na porcie 80. Zakładam również, że obecnie nie ma Wtyczki Apache, która jest obsługiwana przez Nodejs i nie jestem pewien, czy tworzenie wirtualnego hosta jest najlepszym sposobem na wdrożenie tego. Na te pytania powinni odpowiedzieć programiści, którzy utrzymują Nodejs jak dobrzy ludzie w Joyent.

Zamiast portów, lepiej byłoby ocenić stos technologiczny Node, który jest zupełnie inny niż większość innych i dlatego go uwielbiam, ale zawiera również kilka kompromisów, o których powinieneś wiedzieć z góry.

Twój przykład wygląda podobnie do CMS lub sharing web app i istnieją setki gotowych aplikacji, które będą działać dobrze na Apache. Nawet jeśli nie lubisz żadnego gotowego rozwiązania, możesz napisać webapp w PHP / Java / Python lub połącz n dopasuj go z kilkoma gotowymi aplikacjami, a wszystkie są zaprojektowane i Obsługiwane tak, aby działały za pojedynczą instancją Apache.

Nadszedł czas, aby zatrzymać się i pomyśleć o tym, co właśnie powiedziałem.

Teraz jesteś gotowy, aby zdecydować, który techstack zamierzasz użyć. Jeśli Twoja strona nigdy nie będzie używać żadnych z tysięcy gotowych aplikacji, które wymagają Apache, następnie przejdź do węzła w przeciwnym razie musisz najpierw wyeliminować założenia, które powiedziałem wcześniej.

In the end, your wybór techstack jest o wiele ważniejszy niż jakikolwiek pojedynczy komponent.

Całkowicie zgadzam się z @Straseus, że używanie node jest stosunkowo trywialne.js File System api do obsługi przesyłanych i pobieranych plików, ale pomyśl więcej o tym, co chcesz ze swojej witryny w dłuższej perspektywie, a następnie wybierz techstack.

Learning Node ' s framework jest łatwiejszy niż uczenie się innych frameworków, ale nie jest panaceum. Z nieco większym wysiłkiem (który może być wartościowym przedsięwzięciem samym w sobie), możesz może nauczyć się innych ram też. Wszyscy uczymy się od siebie nawzajem, a Ty będziesz bardziej produktywny, jeśli pracujesz w małym zespole, niż Jeśli pracujesz sam, a twoje umiejętności techniczne będą się szybciej rozwijać. Dlatego nie dyskontować umiejętności innych członków zespołu tak tanio.

Ten post ma około roku i są szanse, że już zdecydowałeś, ale mam nadzieję, że moja wypowiedź pomoże następnej osobie, która przechodzi przez podobną decyzję.

Dzięki do czytania.

 -2
Author: RHT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-21 00:14:12

Można zainstalować oba na tym samym serwerze, ale muszą być skonfigurowane do korzystania z różnych portów. Oba nie mogą używać portu 80, przynajmniej nie tak łatwo.

Pamiętaj, że Apache jest serwerem, a nodeJS jest językiem.

Próbowałeś wygooglować problem przed zapytaniem tutaj?

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

Czego potrzebuję, aby uruchomić węzeł.skrypt js na moim serwer?

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

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

 -22
Author: Straseus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:26