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:
-
"le convaincre d'utiliser le noeud (il abandonne peu de terrain sur cela) "
-
télécharger, renommer, enregistrer, etc. fichiers dans le noeud ou
-
je dois installer apache et node sur le même serveur.
Quelle est la situation la plus favorable, et comment la mettre en œuvre?
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:
maintenant la seule chose qui reste est de convaincre votre hébergeur de laisser courir avec cette configuration!!!
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.
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.
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:
-
" 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.
-
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.
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 /
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]
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
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.
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