Сетевой домен NodeJS ExpressJS на веб-сервере Apache

Сетевой домен NodeJS ExpressJS на веб-сервере Apache

Я пришел из мира 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

Связанный контент