
Vengo del mundo LAMP, así que estoy un poco confundido sobre cómo servir una aplicación ExpressJS desde mi servidor web.
Tengo varios hosts virtuales Apache que apuntan a varios directorios y especifican varios nombres de dominio. Todos tienen archivos de configuración en /etc/apache2/sites-available/
mi Ubuntu.
De todos modos, instalé una instancia de ExpressJS usando node, se encuentra en un directorio en mi /var/www/
directorio, con mis otras cosas web (Apache).
¿Cómo lo sirvo con un nombre de dominio específico sin tener que hacerlo IP:3000
(que ni siquiera funciona debido a mi firewall)? Veo esto:Apache HTTPD: resolución de URL para un host virtual con servidores proxy y alias de directorio, pero no estoy seguro de que sea correcto porque leí en otro lugar que desea evitar los hosts Apache para Node, ya que interrumpen su rendimiento. Solo busco la mejor respuesta aquí.
Debe utilizar el puerto 80 y asignarse a un dominio específico, minimizando al mismo tiempo el impacto en el rendimiento. Tampoco estoy seguro de a qué apuntar exactamente en los archivos de nodo, ¿supongo que el /var/www/nodeapp/node_modules/express/index.js
archivo?
¡Gracias por su amable ayuda!
Respuesta1
Gracias por el enlace Michael Hampton, aquí hay una respuesta completa/editada para referencia futura:
Apache VirtualHost/archivo de configuración:
<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>
Nota:Para que lo anterior funcione, necesita instalar mod_proxy
los paquetes de Apache, consultar la documentación de Apache o hacer esto:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html
3000
en el archivo de configuración es porque eso es en lo que se ejecuta mi aplicación Node, consulte aquí:
/*!
* 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);
});
Para ejecutarlo, simplemente haznode index.js
Para que siga funcionando incluso después de salir de ese comando, agregue un &
, así:
node index.js &
^ Tenga en cuenta que solo lo mantiene ejecutándose mientras su sesión Unix está activa; por ejemplo, si cierra su nodo cliente SSH, dejará de ejecutarse incluso con el archivo &
.
Mire aquí para que se ejecute permanentemente:https://stackoverflow.com/questions/12701259/how-to-make-a-node-js-application-run-permanfully