Wir haben einen Apache Webserver auf einem Computer installiert, der auch Seiten mit Perl bedient.
Für ein Projekt habe ich mich entschieden, Node.js anstelle von Perl / Ruby zu verwenden. Sie fragen sich nur, ob es möglich ist, Apache als meinen Webserver zu verwenden (damit es die Seiten bedient) und Node.js zum dynamischen Erstellen der Webseiten zu verwenden (dies ist für eine Web-App, die ich erstelle)?
Mit anderen Worten, können sie Hand in Hand arbeiten, genau wie Apache / Perl oder Apache / PHP usw.
quelle
/
Ich möchte darauf hinweisen, dass die abschließenden Schrägstriche in den Anweisungen ProxyPass und ProxyPassReverse wichtig sind. Sie erhalten 502 (Proxy Error) Antworten, wenn Sie diese nicht festlegen. Ist einem Freund passiert.Nein. NodeJS ist nicht wie Mod-Perl und Mod-PHP als Apache-Modul verfügbar, daher ist es nicht möglich, den Knoten "über" Apache auszuführen. Wie Hexist betonte, ist es möglich, den Knoten als separaten Prozess auszuführen und die Kommunikation zwischen den beiden zu arrangieren. Dies unterscheidet sich jedoch erheblich von dem LAMP-Stapel, den Sie bereits verwenden.
Als Ersatz für Apache bietet der Knoten Leistungsvorteile, wenn Sie viele gleichzeitige Verbindungen haben. Es gibt auch ein riesiges Ökosystem von Modulen für fast alles, was Sie sich vorstellen können.
Aus Ihrer Frage geht nicht hervor, ob Sie bei jeder Anforderung Seiten dynamisch generieren müssen oder nur regelmäßig neue Inhalte zum Zwischenspeichern und Bereitstellen generieren müssen. In letzterem Fall können Sie eine separate Knotenaufgabe verwenden, um Inhalte in einem Verzeichnis zu generieren, das Apache bereitstellen würde. Dies unterscheidet sich jedoch erheblich von PHP oder Perl.
Knoten ist nicht der beste Weg, um statische Inhalte bereitzustellen. Nginx und Lack sind dabei effektiver. Sie können statischen Inhalt bereitstellen, während Node die dynamischen Daten verarbeitet.
Wenn Sie in Betracht ziehen, Node überhaupt für eine Webanwendung zu verwenden, sollte Express ganz oben auf Ihrer Liste stehen. Sie könnten eine Webanwendung nur in Node implementieren, aber Express (und ähnliche Frameworks wie Flatiron, Derby und Meteor) sind so konzipiert, dass sie viel Schmerz und Langeweile beseitigen. Obwohl die Express-Dokumentation auf den ersten Blick etwas spärlich wirken kann, sehen Sie sich die hier noch verfügbaren Screenshots an: http://expressjs.com/2x/screencasts.html Sie geben Ihnen einen guten Überblick darüber, was Express anbietet und warum es ist nützlich. Das Github-Repository für ExpressJS enthält auch viele gute Beispiele für alles, von der Authentifizierung bis zur Organisation Ihrer App.
quelle
Obwohl es hier viele gute Tipps gibt, möchte ich die von Ihnen gestellte Frage beantworten:
JA , können Sie Node.js auf Apache an der Seite von Perl und PHP laufen WENN Sie es als CGI - Modul ausgeführt werden . Bis jetzt kann ich keinen Mod-Knoten für Apache finden, aber siehe: CGI-Knoten für Apache hier http://www.cgi-node.org/ .
Der interessante Teil über CGI-Knoten ist, dass es JavaScript genau so verwendet, wie Sie PHP verwenden würden, um dynamischen Inhalt zu generieren, statische Seiten zu warten, auf SQL-Datenbanken zuzugreifen usw. Sie können sogar JavaScript-Kernbibliotheken zwischen dem Server und dem Client / Browser freigeben.
Ich denke, die Umstellung auf eine einzige Sprache zwischen Client und Server findet statt und JavaScript scheint ein guter Kandidat zu sein.
Ein kurzes Beispiel von der Website cgi-node.org:
<? include('myJavaScriptFile.js'); ?> <html> <body> <? var helloWorld = 'Hello World!'; ?> <b><?= helloWorld ?><br/> <? for( var index = 0; index < 10; index++) write(index + ' '); ?> </body> </html>
Dies gibt aus:
Hello World! 0 1 2 3 4 5 6 7 8 9
Sie haben auch vollen Zugriff auf die HTTP-Anforderung. Dazu gehören Formulare, hochgeladene Dateien, Header usw.
Ich führe derzeit Node.js über das CGI-Node-Modul auf Godaddy aus.
Auf der CGI-Node.org-Website finden Sie die gesamte Dokumentation für den Einstieg.
Ich weiß, dass ich davon schwärme, aber es ist endlich eine Erleichterung, etwas anderes als PHP zu verwenden. Außerdem, um JavaScript sowohl auf dem Client als auch auf dem Server codieren zu können.
Hoffe das hilft.
quelle
Die übliche Methode, um das zu tun, was Sie tun möchten, besteht darin, sie nebeneinander auszuführen und entweder Proxy-Anforderungen von Apache an node.js basierend auf Domäne / URL zu senden oder einfach den Inhalt von node.js vom Knoten abzurufen. js port. Diese spätere Methode eignet sich sehr gut für Socket.io-fähige Widgets auf Ihrer Website und dergleichen.
Wenn Sie jedoch die gesamte Generierung dynamischer Inhalte in Node durchführen möchten, können Sie auch node.js als primären Webserver verwenden. Dies ist sehr gut darin, sowohl statische als auch dynamische http-Anforderungen zu bearbeiten.
Sehen:
http://expressjs.com/
https://github.com/joyent/node/wiki/modules
quelle
Sie können immer etwas Shell-Scripty machen wie:
#!/usr/bin/node var header = "Content-type: text/plain\n"; var hi = "Hello World from nodetest!"; console.log(header); console.log(hi); exit;
quelle
Während ich meine eigenen serverseitigen JS-Experimente durchführte, verwendete ich schließlich teajs . Es entspricht common.js , basiert auf V8 UND ist das einzige mir bekannte Projekt, das das Apache-Servermodul 'mod_teajs' bereitstellt.
Meiner Meinung nach ist der Node.js-Server nicht produktionsbereit und es fehlen zu viele Funktionen - Apache ist kampferprobt und der richtige Weg, um SSJS auszuführen.
quelle
Wenn Sie PHP verwenden, können Sie Ihre Anforderung über shell_exec an Node-Skripte weiterleiten und Argumente als JSON-Zeichenfolgen in der Befehlszeile an Skripte übergeben. Beispielaufruf:
<?php shell_exec("node nodeScript.js"); // without arguments shell_exec("node nodeScript.js '{[your JSON here]}'"); //with arguments ?>
Die Einschränkung ist, dass Sie beim Umgang mit Benutzerdaten sehr vorsichtig sein müssen, wenn sie sich in der Nähe einer Befehlszeile befinden. Beispiel Albtraum:
<?php $evilUserData = "'; [malicious commands here];"; shell_exec("node nodeScript.js '{$evilUserData}'"); ?>
quelle