
Ich komme aus der LAMP-Welt und bin daher etwas verwirrt, wie ich eine ExpressJS-Anwendung von meinem Webserver aus bereitstellen kann.
Ich habe mehrere virtuelle Apache-Hosts, die alle auf verschiedene Verzeichnisse verweisen und verschiedene Domänennamen angeben. Sie alle haben Konfigurationsdateien auf /etc/apache2/sites-available/
meinem Ubuntu.
Wie auch immer, ich habe mit Node eine ExpressJS-Instanz installiert, sie befindet sich in einem Verzeichnis in meinem /var/www/
Verzeichnis, mit meinen anderen Web-Sachen (Apache).
Wie kann ich es mit einem bestimmten Domänennamen bereitstellen, ohne dies tun zu müssen IP:3000
(was aufgrund meiner Firewall nicht einmal funktioniert). Ich sehe Folgendes:Apache HTTPD: URL-Auflösung für einen virtuellen Host mit Proxys und Verzeichnisalias, aber ich bin nicht sicher, ob das richtig ist, weil ich woanders gelesen habe, dass Sie Apache-Hosts für Node vermeiden möchten, da dies die Leistung beeinträchtigt? Ich suche hier nur nach der besten Antwort.
Es sollte Port 80 verwenden und einer bestimmten Domäne zugeordnet werden, wobei die Auswirkungen auf die Leistung so gering wie möglich gehalten werden sollten. Ich bin mir auch nicht sicher, worauf ich in den Knotendateien genau verweisen soll. Ich vermute, auf die /var/www/nodeapp/node_modules/express/index.js
Datei?
Vielen Dank für Ihre freundliche Unterstützung!
Antwort1
Danke für den Link, Michael Hampton, hier ist eine vollständige/bearbeitete Antwort zur späteren Bezugnahme:
Apache VirtualHost/Konfigurationsdatei:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPreserveHost On
ProxyPass "/" "http://localhost:3000"
ProxyPassReverse "/"= "http://localhost:3000"
</VirtualHost>
Notiz:Damit das oben genannte funktioniert, müssen Sie die Apache- mod_proxy
Pakete installieren, die Apache-Dokumentation lesen oder Folgendes tun:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html
3000
in der Konfigurationsdatei liegt daran, dass meine Node-App darauf läuft, siehe hier:
/*!
* express
* Copyright(c) 2009-2013 TJ Holowaychuk
* Copyright(c) 2013 Roman Shtylman
* Copyright(c) 2014-2015 Douglas Christopher Wilson
* MIT Licensed
* index.js
*/
'use strict';
var express = require('./lib/express');
var http = require('http');
var app = express();
var server = http.createServer(app);
app.get('/', function(req, res) {
res.send("Hello World!");
});
server.listen(3000, 'localhost');
server.on('listening', function() {
console.log('Express server started on port %s at %s', server.address().port, server.address().address);
});
Um es auszuführen, führen Sie einfach Folgendes aus:node index.js
Um es auch nach dem Beenden des Befehls weiter auszuführen, fügen Sie ein hinzu &
, etwa so:
node index.js &
^ Beachten Sie, dass es nur ausgeführt wird, während Ihre Unix-Sitzung aktiv ist. Wenn Sie beispielsweise Ihren SSH-Client schließen, wird der Knoten auch mit dem nicht mehr ausgeführt &
.
Um es dauerhaft zum Laufen zu bringen, schauen Sie hier:https://stackoverflow.com/questions/12701259/wie-man-eine-node-js-application-run-permanently-installieren-kann