Apache et noeud.js sur le même serveur

Je veux utiliser Node parce que c'est swift, utilise le même langage que j'utilise du côté client, et c'est non-bloquant par définition. Mais le gars que j'ai engagé pour écrire le programme pour le traitement des fichiers (sauvegarde, édition, renommage, téléchargement, Téléchargement de fichiers, etc.), il veut utiliser apache. Donc, je dois:

  1. "le convaincre d'utiliser le noeud (il abandonne peu de terrain sur cela) "

  2. télécharger, renommer, enregistrer, etc. fichiers dans le noeud ou

  3. je dois installer apache et node sur le même serveur.

Quelle est la situation la plus favorable, et comment la mettre en œuvre?

296
demandé sur Michael Irigoyen 2012-03-23 02:37:41

9 réponses

grande question!

il y a beaucoup de sites Web et d'applications web gratuites implémentées en PHP qui fonctionnent sur Apache, beaucoup de gens l'utilisent donc vous pouvez masquer quelque chose assez facilement et en plus, c'est une façon simple de servir du contenu statique. Node est rapide, puissant, élégant, et un outil sexy avec la puissance brute de V8 et une pile plate sans dépendances intégrées.

Je veux aussi la facilité/flexibilité D'Apache et pourtant le grunt et l'élégance de Nœud.JS, pourquoi je ne peux pas avoir les deux ?

heureusement avec la ProxyPass directive dans L'Apache httpd.conf ce n'est pas trop difficile de pipe toutes les requêtes sur une URL particulière à votre noeud.Js application.

ProxyPass /node http://localhost:8000

aussi, assurez-vous que les lignes suivantes ne sont pas commentées de sorte que vous obtenez le bon proxy et le sous-module pour rediriger les requêtes http:

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

Puis lancez votre application Node sur le port 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');

alors vous pouvez accéder à tous les noeuds.Js logic en utilisant le chemin /node/ sur votre url, le reste du site peut être laissé à Apache pour héberger vos pages PHP existantes:

enter image description here

maintenant la seule chose qui reste est de convaincre votre hébergeur de laisser courir avec cette configuration!!!

627
répondu Steven de Salas 2018-01-30 23:33:16

cette question fait plus partie de défaut du serveur mais FWIW je dirais exécuter Apache devant le noeud.js n'est pas une bonne approche dans la plupart des cas.

le ProxyPass D'Apache est génial pour beaucoup de choses (comme exposer les services basés sur Tomcat dans le cadre d'un site) et si votre noeud.js app est juste faire un spécifique, petit rôle ou est un outil interne qui n'est susceptible d'avoir un nombre limité d'utilisateurs, alors qu'il pourrait être plus facile à utiliser de sorte que vous pouvez l'obtenir de travail et de passer, mais cela ne ressemble pas le cas ici.

si vous voulez profiter de la performance et de l'échelle, vous obtiendrez à L'aide de Noeud.js - et surtout si vous voulez utiliser quelque chose qui implique le maintien d'une connexion persistante comme des sockets web - vous êtes mieux à même D'exécuter à la fois Apache et votre noeud.js sur les autres ports (par exemple Apache sur localhost: 8080, Node.js sur localhost:3000) et ensuite exécuter quelque chose comme NGINX, vernis ou proxy HA devant - et le routage du trafic de cette façon.

avec quelque chose comme vernis ou nginx vous pouvez acheminer le trafic basé sur le chemin et/ou l'hôte. Ils utilisent tous les deux beaucoup moins de ressources système et est beaucoup plus évolutif que l'utilisation d'Apache pour faire la même chose.

46
répondu Iain Collins 2015-09-17 12:34:50



Instructions pour exécuter node server le long de apache2(v2.4.xx) server :



afin de pipe toutes les requêtes sur une URL particulière à votre noeud.JS application de créer des "151970920 de fichier" à l'intérieur /etc/apache2/conf-available directory, et ajoutez la ligne suivante dans le fichier créé:

ProxyPass /node http://localhost:8000/

Changement de 8000 à l'préférée numéro de port pour node server .

activer les configurations personnalisées avec la commande suivante:

$> sudo a2enconf CUSTOM

CUSTOM est votre nom de fichier nouvellement créé sans extension, puis activez proxy_http avec la commande:

$> sudo a2enmod proxy_http

il doit activer à la fois les modules proxy et proxy_http . Vous pouvez vérifier si le module est activé ou non avec:

$> sudo a2query -m MODULE_NAME

après configuration et modules activés, vous devrez redémarrer le serveur apache:

$> sudo service apache2 restart

Maintenant vous pouvez exécuter node server. Toutes les requêtes au URL/node seront traitées par le serveur de noeud.

24
répondu krmld 2016-09-20 09:50:58

lancer un noeud et Apache sur un serveur est trivial car ils n'entrent pas en conflit. NodeJS est juste un moyen d'exécuter JavaScript côté serveur. Le vrai dilemme vient de l'accès à la fois noeud et Apache de l'extérieur. Comme je le vois, vous avez deux choix:

  1. " configurer Apache pour proxy toutes les requêtes correspondantes à NodeJS, qui fera le téléchargement du fichier et tout ce qui se trouve dans le noeud.

  2. Apache et Noeud sur différentes combinaisons IP:port (si votre serveur a deux ip, l'un peut être relié à votre écouteur de noeuds, L'autre à Apache).

je commence aussi à soupçonner que ce n'est peut-être pas ce que vous cherchez. Si votre objectif final est que vous écriviez votre logique d'application dans Nodejs et une partie de "gestion de fichier" que vous déchargez à un entrepreneur, alors c'est vraiment un choix de langue, pas un serveur web.

13
répondu Yarek T 2016-02-19 19:01:17

vous pouvez utiliser une approche différente telle que l'écriture d'un serveur mandataire inverse avec nodejs pour mandataire apache et toutes les autres applications nodejs.

fist vous devez faire tourner apache sur un port différent autre que le port 80. ex: port 8080

alors vous pouvez écrire un script de procuration inverse avec nodejs comme:

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

article suivant décrit l'ensemble du processus de fabrication de ce.

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

7
répondu wathmal 2016-10-22 08:37:39
ProxyPass /node http://localhost:8000/     
  • cela a fonctionné pour moi quand j'ai fait l'entrée ci-dessus dans httpd-vhosts.conf au lieu de httpd.conf
  • J'ai XAMPP installé sur mon environnement et je cherchais à toucher tout le trafic à apache sur le port 80 avec NodeJS applicatin fonctionnant sur le port 8080 i.e. http://localhost / [nom de la demande]
0
répondu rahul shukla 2018-02-08 05:46:11

je cherchais la même information. Enfin trouvé la réponse du lien sur la réponse ci-dessus par @Straseus

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

Voici la solution finale pour exécuter apache website sur le port 80, node JS service sur le port 8080 et utiliser .htaccess RewriteRule

dans le DocumentRoot du site apache, ajouter le suivant:

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]

Pour le niveau de répertoire de redirection, le lien ci-dessus suggère (.+ ) règle, qui nécessite un ou plusieurs caractères après le ' node/'. J'ai eu à le convertir en (.* ) qui est zéro ou plus pour mes affaires à travailler.

Merci beaucoup pour le lien @Straseus

-1
répondu pd1980 2013-10-12 00:30:34

je suppose que vous créez une application web parce que vous faites référence à Apache et à Node. Réponse rapide-est - il possible-Oui. Est - il recommandé-non. Les faisceaux de noeuds c'est son propre serveur web et la plupart des sites Web fonctionnent sur le port 80. Je suppose également qu'il n'y a actuellement aucun plugin Apache qui soit supporté par Nodejs et je ne suis pas sûr que la création d'un hôte virtuel soit la meilleure façon de mettre en œuvre ceci. Ce sont les questions qui devraient être répondues par les développeurs qui maintiennent Nodejs comme les gens de bien à Joyent.

au lieu de ports, il serait préférable d'évaluer la pile tech de Node qui est complètement différente de la plupart des autres et qui est pourquoi je l'aime mais il implique également quelques compromis que vous devriez être conscient à l'avance.

votre exemple ressemble à un CMS ou à une application web de partage et il y a des centaines d'applications disponibles qui fonctionneront très bien sur Apache. Même si vous n'aimez aucune solution prête à l'emploi, vous pouvez écrire webapp en PHP / Java / Python ou mix n font correspondre avec un couple d'applications prêtes à l'emploi et ils sont tous conçus et pris en charge pour fonctionner derrière une seule instance D'Apache.

il est temps de réfléchir à ce que je viens de dire.

Maintenant, vous êtes prêt à décider sur qui techstack vous allez utiliser. Si votre site web n'utilisera jamais aucune des milliers d'applications prêtes à l'emploi qui nécessitent Apache, alors optez pour le noeud sinon vous devez d'abord éliminer la les hypothèses que je l'ai dit plus tôt.

en fin de compte, votre choix de techstack est bien plus important que n'importe quel composant individuel.

je suis tout à fait d'accord avec @Straseus qu'il est relativement trivial d'utiliser le noeud.api de système de fichiers js pour gérer les téléchargements et les téléchargements, mais pensez davantage à ce que vous voulez de votre site web à long terme et choisissez ensuite votre techstack.

l'Apprentissage du Nœud cadre est plus facile que l'apprentissage d'autres cadres, mais ce n'est pas une panacée. Avec un peu plus d'effort (ce qui peut être une entreprise valable en soi), vous pouvez apprendre n'importe quel autre cadre aussi. Nous apprenons tous les uns des autres et vous serez plus productif si vous travaillez en petite équipe que si vous travaillez seul et que vos compétences techniques se développent plus rapidement. Par conséquent, ne négligez pas les compétences des autres membres de votre équipe si bon marché.

Ce poste est d'environ un an et les chances sont que vous avez déjà décidé, mais j'espère que mon rant aidera la prochaine personne qui traverse une décision similaire.

Merci d'avoir lu.

-2
répondu RHT 2013-04-21 00:14:12

vous pouvez installer les deux sur le même serveur, mais ils doivent être configurés pour utiliser des ports différents. Les deux ne peuvent pas utiliser le port 80, du moins pas si facilement.

gardez à l'esprit Qu'Apache est un serveur, et nodeJS un langage.

avez-vous essayé de googler la question avant de demander ici?

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

Qu'est-ce qu'il me faut pour exécuter un noeud.le script js sur mon serveur?

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

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

-22
répondu Straseus 2017-05-23 11:33:26