
Я пришел из мира LAMP, поэтому немного запутался в том, как обслуживать приложение ExpressJS с моего веб-сервера.
У меня есть несколько виртуальных хостов Apache, которые все указывают на различные каталоги и указывают различные доменные имена. У всех них есть файлы конфигурации в /etc/apache2/sites-available/
моем Ubuntu.
В любом случае, я установил экземпляр ExpressJS с помощью node, он находится в каталоге в моем /var/www/
каталоге, вместе с другими моими веб-ресурсами (Apache).
Как мне обслуживать его с определенным доменным именем без необходимости делать это IP:3000
(что даже не работает из-за моего брандмауэра). Я вижу это:Apache HTTPD: разрешение URL для виртуального хоста с прокси-серверами и псевдонимами каталогов, но я не уверен, что это правильно, потому что я читал в другом месте, что вы хотите избегать хостов Apache для Node, так как это нарушает его производительность? Просто ищу лучший ответ здесь.
Он должен использовать порт 80 и быть сопоставлен с определенным доменом, при этом минимизируя влияние на производительность. Я также не уверен, на что именно его направить в файлах узлов, я предполагаю, что файл /var/www/nodeapp/node_modules/express/index.js
?
Спасибо за вашу любезную помощь!
решение1
Спасибо за ссылку, Майкл Хэмптон, вот полный/отредактированный ответ для дальнейшего использования:
Файл конфигурации/виртуального хоста 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>
Примечание:Чтобы все вышеперечисленное заработало, вам необходимо установить mod_proxy
пакеты Apache, см. документацию 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