Подтвердить что ты не робот

Как установить nodejs и apache в один и тот же порт 80

Мне нужно поставить nodejs в порт 80, но apache уже использует его. Как я могу поместить оба (nodejs и apache) на один и тот же порт 80? Мне это нужно, потому что в моем университете все порты заблокированы, за исключением PORT 80. (Это приложение реального времени с nodejs и socket.io(websockets), а с другой стороны - приложение php). Большое спасибо

4b9b3361

Ответ 1

Я лично сделал это по-другому из @liammclennan. Некоторые предлагают, что проксирование через Apache поражает некоторые преимущества производительности и масштабируемости Node (у меня нет опыта, так как мой сервер не работает) t получить так много трафика, но из ссылки @liammclennan: "Каждый запрос, который приходит через Apache, заставит поток Apache ждать/блокировать, пока ответ не будет возвращен из вашего процесса Node.js.", что, очевидно, не сетка с архитектурой Node.)

Я использовал node-http-proxy для настройки прокси-сервера Node примерно так, как описано в первой ссылке (мой Node прокси-сервер работает на порту 80, а Apache и другие мои службы Node не работают). Кажется, что до сих пор хорошо работает, хотя у меня были случайные проблемы со стабильностью, которые я "решил", проверяя прокси-сервер, который все еще работает с заданием cron (edit:). В эти дни кажется намного более стабильным). Прокси довольно легкий, занимая около 30 МБ памяти.

Ответ 2

Я делаю это через node.js proxy..

Установите http-proxy с npm или официальная страница

Пример:

var http = require('http'),
httpProxy = require('http-proxy'),
proxyServer = httpProxy.createServer ({
    hostnameOnly: true,
    router: {
        'domain.com':       '127.0.0.1:81',
        'domain.co.uk':     '127.0.0.1:82',
        '127.0.0.1':        '127.0.0.1:83'
    }
});

proxyServer.listen(80);

Это создает процесс node, прослушивающий порт 80, и пересылку запросов для доменов, которые идут: 81,82,83 и т.д. Я рекомендую запустить это с помощью forever и добавить запись в init.d, чтобы ваш прокси-сервер если система выключается.

Ответ 3

Вы также можете использовать Apache 2 mod_proxy и mod_proxy_http, которые могут быть более надежными или лучше работать в зависимости от вашей системы.

Вот пример:

# Use Apache for requests to http://example.com/
# but use Node.js for requests to http://example.com/node/
<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/example/
    <Location /node>
        ProxyPass http://127.0.0.1:8124/
        ProxyPassReverse http://127.0.0.1:8124/
    </Location>
</VirtualHost>

И, конечно же, вы можете изменить директивы для своих нужд, например, использовать другой порт для своего виртуального хоста (например, 443), другой порт для Node.js или настроить прокси-сервер под другим блоком, например, для поддомена (например, Node.example.com).

Ответ 5

Я обычно использую haproxy в качестве интерфейсного интерфейса в подобных ситуациях и имею этот прокси на соответствующем бэкэнд-сервере. (Несмотря на то, что ваш процесс node.js прокси-сервер также является допустимым подходом в зависимости от ваших потребностей).

Ответ 6

Я нашел крутой gist Запустить apache и nodejs на порт 80. еще не пробовал, но, конечно же, будет

Шаг 1

Получите VPS, который предлагает 2 или более IP-адреса.

Шаг 2

Из WHP cPanel найдите пункт меню Service Configuration, выберите Apache Configuration, а затем нажмите Reserved IPs Editor.

Шаг 3

Отметьте IP-адрес, который вы НЕ ХОТИТЕ Apache, чтобы слушать и писать так что вы можете использовать его на следующем шаге. Нажмите Save.

Шаг 4

Установите Node.js и создайте сервер следующим образом:

var http = require('http');

var server = http.createServer(function(req, res) {
  res.writeHead(200);
  res.end('Hello, world!');
});

server.listen(80, '111.111.111.111');

Замена 111.111.111.111 IP-адресом, который вы ранее зарезервировано из WHM cPanel.

Шаг 5

Прекратите тратить свое время и никогда не слушайте тех, кто говорит вам использовать mod_rewrite в прокси Node.js снова.

Update:

Мы можем решить проблему разными способами и ИМХО, мы должны хотя бы знать каждый возможный путь 😉. Мы можем сделать это, не покупая новый IP, конечно, ставя прокси перед сервером Apache и NodeJS, каждый из которых запускает другие порты, кроме 80.