我来自台灯世界,所以我对如何从我的how服务器提供一个ExpressJS应用程序感到有点困惑。
我有多个Apache虚拟主机,它们都指向不同的目录并指定不同的域名。他们在我的Ubuntu上都有/etc/apache2/sites-available/中的配置文件。
无论如何,我使用节点安装了一个ExpressJS实例,它位于我的/var/www/目录中的一个目录中,还有我的其他web (Apache)内容。
我如何使用特定的域名来服务它,而不需要做IP:3000 (因为我的防火墙而不能工作)。我看到了这个:Apache :具有代理和目录别名的虚拟主机的URL解析,但我不确定它是否正确,因为我在其他地方读到过,您想要避免使用Apache,因为它会影响节点的性能?只是在这里寻找最好的答案。
它应该使用端口80,并映射到特定的域,同时最小化性能影响。我也不知道在节点文件中应该指向什么,我猜是/var/www/nodeapp/node_modules/express/index.js文件吗?
感谢您的慷慨帮助!
发布于 2018-03-03 12:30:59
感谢迈克尔·汉普顿的链接,这里有一个完整的/编辑的答案供将来参考:
/Config文件:
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"注:要使上述工作正常进行,您需要安装Apache的mod_proxy包,请参阅Apache文档,或执行以下操作:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html配置文件中的3000是因为这是我的Node应用程序正在运行的,请参见这里:
/*!
* 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);
});要运行它,只需执行node index.js
为了使它即使在退出该命令之后也能运行,添加一个&,如下所示:
node index.js &
^注意,只有在Unix会话处于活动状态时才能继续运行,例如,如果关闭SSH客户端节点,即使使用&,也会停止运行。
看这里让它永久运行:https://stackoverflow.com/questions/12701259/how-to-make-a-node-js-application-run-permanently
https://serverfault.com/questions/899774
复制相似问题