我来自 LAMP 世界,因此对于如何从我的网络服务器提供 ExpressJS 应用程序有点困惑。
我有多个 Apache 虚拟主机,它们都指向不同的目录并指定不同的域名。它们都在/etc/apache2/sites-available/
我的 Ubuntu 上具有配置文件。
无论如何,我使用节点安装了一个 ExpressJS 实例,它位于我的/var/www/
目录的一个目录中,与我的其他 Web(Apache)内容在一起。
我如何才能使用特定域名提供服务而无需执行任何操作IP:3000
(由于我的防火墙,这甚至不起作用)。我看到了以下内容:Apache HTTPD:具有代理和目录别名的虚拟主机的 URL 解析,但我不确定这是否正确,因为我在其他地方读到您想避免使用 Apache 主机作为 Node,因为它会破坏其性能?只是在这里寻找最好的答案。
它应该使用端口 80 并映射到特定域,同时尽量减少对性能的影响。我也不确定在节点文件中应该将它指向什么,我猜是文件/var/www/nodeapp/node_modules/express/index.js
?
谢谢您的热情帮助!
答案1
感谢 Michael Hampton 提供的链接,这里有一个完整/编辑过的答案,供将来参考:
Apache VirtualHost/配置文件:
<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>
笔记:为了使上述功能正常工作,您需要安装 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