it-swarm.com.de

Läuft Node.js in Apache?

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. Fragen Sie sich nur, ob es möglich ist, Apache als Webserver zu verwenden (damit die Seiten bereitgestellt werden) und Node.js zum dynamischen Erstellen der Webseiten zu verwenden (dies ist für eine von mir erstellte Web-App)?

Mit anderen Worten, können sie wie Apache/Perl oder Apache/PHP usw. Hand in Hand arbeiten.

66
JackSparrow123

Das Hosten einer NodeJS-Site über Apache kann mit dem Apache-Proxy-Modul organisiert werden.

Es ist besser, nodejs server auf localhost mit dem Standardport 1337 zu starten

Proxy mit einem Befehl aktivieren:

Sudo a2enmod proxy proxy_http

Aktivieren Sie die Proxy-Verarbeitung mit ProxyRequests erst, wenn Sie Ihren Server gesichert haben. Offene Proxy-Server sind sowohl für Ihr Netzwerk als auch für das Internet insgesamt gefährlich. Wenn Sie ProxyRequests auf Off setzen, wird die Verwendung der ProxyPass-Direktive nicht deaktiviert.

Konfigurieren Sie/etc/apche2/sites-availables mit

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName site.com
    ServerAlias www.site.com 

    ProxyRequests off

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    <Location />
        ProxyPass http://localhost:1337/
        ProxyPassReverse http://localhost:1337/
    </Location>
</VirtualHost>

und starten Sie den Apache2-Dienst neu.

63
Evgeny Karpov

Nein. NodeJS ist nicht wie mod-Perl und mod-php als Apache-Modul verfügbar, daher ist es nicht möglich, node "über" Apache auszuführen. Wie Hexist hervorhob, ist es möglich, den Knoten als separaten Prozess auszuführen und die Kommunikation zwischen beiden zu arrangieren. Dies unterscheidet sich jedoch erheblich von dem LAMP-Stack, 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 dynamisch Seiten generieren oder nur regelmäßig neue Inhalte für das Caching und das Serving generieren müssen. In letzterem Fall könnten Sie separate Node-Tasks verwenden, um Inhalte für ein Verzeichnis zu generieren, das von Apache bereitgestellt wird. Dies unterscheidet sich jedoch erheblich von PHP oder Perl.

Knoten ist nicht der beste Weg, um statischen Inhalt bereitzustellen. Nginx und Lack sind dabei effektiver. Sie können statischen Inhalt liefern, während Node die dynamischen Daten verarbeitet.

Wenn Sie erwägen, Node für eine Webanwendung zu verwenden, sollte Express ganz oben auf Ihrer Liste stehen. Sie könnten eine Webanwendung rein in Node implementieren, aber Express (und ähnliche Frameworks wie Flatiron, Derby und Meteor) sind so konzipiert, dass Sie viel Zeit und Mühe sparen. Auch wenn die Express-Dokumentation auf den ersten Blick etwas spärlich erscheint, sehen Sie sich die hier noch verfügbaren Screencasts an: http://expressjs.com/2x/screencasts.html Sie werden Ihnen eine gute geben Sinn für das, was Express anbietet und warum es nützlich ist. Das Github-Repository für ExpressJS enthält auch viele gute Beispiele für alles von der Authentifizierung bis zur Organisation Ihrer App.

41
Darren

Obwohl es hier viele gute Tipps gibt, möchte ich die Frage beantworten, die Sie gestellt haben:

Mit anderen Worten, können sie wie Apache/Perl oder Apache/PHP usw. Hand in Hand arbeiten.

[~ # ~] ja [~ # ~] , Sie können Node.js auf Apache neben Perl und PHP [~ ausführen # ~] Wenn Sie [~ # ~] als CGI-Modul ausführen. Bis jetzt kann ich keinen Mod-Node für Apache finden, aber check out: CGI-Node für Apache hier http: //www.cgi-node.org/ .

Das Interessante an cgi-node ist, dass JavaScript genau so verwendet wird, wie Sie PHP verwenden würden, um dynamische Inhalte zu generieren, statische Seiten zu reparieren, auf SQL-Datenbanken zuzugreifen usw. Sie können sogar Inhalte freigeben Haupt-JavaScript-Bibliotheken zwischen dem Server und dem Client/Browser.

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, Überschriften usw.

Ich starte derzeit Node.js über das CGI-Node-Modul auf Godaddy.

Auf der Website CGI-Node.org finden Sie die gesamte Dokumentation für den Einstieg.

Ich weiß, ich schwärme davon, 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 zu codieren.

Hoffe das hilft.

22
Uei Richo

Die gebräuchliche Methode für das, was Sie tun möchten, besteht darin, sie nebeneinander auszuführen und entweder Proxy-Anforderungen von Apache an node.js basierend auf domain/url oder einfach den Inhalt von node.js vom Knoten abzurufen. js port. Diese spätere Methode eignet sich sehr gut, wenn Sie Widgets auf Ihrer Site haben, die mit socket.io betrieben werden.


Wenn Sie jedoch alle dynamischen Inhalte in Node generieren möchten, können Sie Node.js auch als primären Webserver verwenden. Dies ist eine sehr gute Aufgabe, wenn Sie sowohl statische als auch dynamische http-Anforderungen bearbeiten.

Sehen:

http://expressjs.com/

https://github.com/joyent/node/wiki/modules

4
hexist

Während meiner eigenen serverseitigen JS-Experimente habe ich teajs verwendet. Es entspricht common.js , basiert auf V8 UND ist das einzige Projekt, von dem ich weiß, dass es 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.

0

Sie können immer so etwas wie Shell-Scripty machen:

#!/usr/bin/node

var header = "Content-type: text/plain\n";
var hi = "Hello World from nodetest!";
console.log(header);
console.log(hi);

exit;
0
Xaphiero