Назад | Перейти на главную страницу

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

Я пришел из мира LAMP, поэтому я немного не понимаю, как обслуживать приложение ExpressJS с моего веб-сервера.

У меня есть несколько виртуальных хостов Apache, которые указывают на разные каталоги и указывают разные доменные имена. У всех есть файлы конфигурации в /etc/apache2/sites-available/ на моем Ubuntu.

В любом случае, я установил экземпляр ExpressJS с помощью узла, он находится в каталоге в моем /var/www/ каталог с другими моими веб-материалами (Apache).

Как мне обслужить его с определенным доменным именем без необходимости IP:3000 (который даже не работает из-за моего брандмауэра). Я вижу это: Apache HTTPD: разрешение URL для виртуального хоста с прокси и псевдонимом каталога, но я не уверен, что это правильно, потому что я читал в другом месте, что вы хотите избежать хостов Apache для Node, поскольку это нарушает его производительность? Просто ищу здесь лучший ответ.

Он должен использовать порт 80 и быть сопоставлен с конкретным доменом, сводя к минимуму влияние на производительность. Я также не уверен, что именно указывать на это в файлах узлов, я предполагаю, что /var/www/nodeapp/node_modules/express/index.js файл?

Спасибо за вашу любезную помощь!

Спасибо за ссылку, Майкл Хэмптон, вот полный / отредактированный ответ для дальнейшего использования:

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