
我來自 LAMP 世界,所以我對如何從我的網頁伺服器提供 ExpressJS 應用程式有點困惑。
我有多個 Apache 虛擬主機,它們都指向不同的目錄並指定不同的網域名稱。它們在/etc/apache2/sites-available/
我的 Ubuntu 上都有設定檔。
無論如何,我使用 Node 安裝了一個 ExpressJS 實例,它/var/www/
與我的其他 Web (Apache) 內容一起位於我的目錄中的一個目錄中。
我如何使用特定的網域來為其提供服務而不必這樣做IP:3000
(由於我的防火牆,這甚至不起作用)。我看到這個:Apache HTTPD:具有代理和目錄別名的虛擬主機的 URL 解析,但我不確定它是否正確,因為我在其他地方讀到您希望避免 Node 的 Apache 主機,因為它會破壞其效能?只是在這裡尋找最佳答案。
它應該使用連接埠 80 並映射到特定域,同時最大限度地減少效能影響。我也不確定在節點檔案中到底要指向什麼,我猜是該/var/www/nodeapp/node_modules/express/index.js
檔案?
感謝您的熱心幫助!
答案1
感謝邁克爾·漢普頓(Michael Hampton)的鏈接,這是完整/編輯的答案以供將來參考:
Apache 虛擬主機/設定檔:
<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