
Eu venho do mundo LAMP, então estou um pouco confuso sobre como servir um aplicativo ExpressJS do meu servidor web.
Eu tenho vários hosts virtuais do Apache que apontam para vários diretórios e especificam vários nomes de domínio. Todos eles têm arquivos de configuração no /etc/apache2/sites-available/
meu Ubuntu.
De qualquer forma, instalei uma instância ExpressJS usando node, ela fica em um diretório no meu /var/www/
diretório, com minhas outras coisas da web (Apache).
Como faço para atendê-lo com um nome de domínio específico sem precisar fazer isso IP:3000
(o que nem funciona por causa do meu firewall). Eu vejo isso:Apache HTTPD: resolução de URL para um host virtual com proxies e alias de diretório, mas não tenho certeza se está correto porque li em outro lugar que você deseja evitar hosts Apache para Node, pois isso atrapalha seu desempenho? Apenas procurando a melhor resposta aqui.
Deve usar a porta 80 e ser mapeado para um domínio específico, minimizando o impacto no desempenho. Também não tenho certeza para onde apontar exatamente nos arquivos do nó, estou supondo o /var/www/nodeapp/node_modules/express/index.js
arquivo?
Obrigado pela sua gentil ajuda!
Responder1
Obrigado pelo link Michael Hampton, aqui está uma resposta completa/editada para referência futura:
Arquivo Apache VirtualHost/config:
<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>
Observação:Para que o procedimento acima funcione, você precisa instalar mod_proxy
os pacotes do Apache, consulte a documentação do Apache ou faça o seguinte:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html
3000
no arquivo de configuração é porque é nisso que meu aplicativo Node está sendo executado, veja aqui:
/*!
* 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 executá-lo, basta fazernode index.js
Para mantê-lo funcionando mesmo depois de sair desse comando, adicione um &
, assim:
node index.js &
^ Observe que apenas o mantém em execução enquanto sua sessão Unix está ativa, por exemplo, se você fechar seu nó cliente SSH, ele parará de funcionar mesmo com o arquivo &
.
Veja aqui para fazê-lo funcionar permanentemente:https://stackoverflow.com/questions/12701259/how-to-make-a-node-js-application-run-permanently