Как указать разные поддомены для разных приложений на одном сервере? (используйте node.js в качестве прокси?)

Я настраиваю node.js-сервер, но я также хотел бы, чтобы Apache работал там одновременно. Узел станет основным веб-сайтом, и будут субдомены, указывающие на Apache.

Единственный способ, которым я могу думать о том, как это сделать, - это заставить разные приложения прослушивать разные порты, а затем иметь прокси-приложение, которое слушает порт 80, а затем "перенаправляет" порт в соответствии с используемым субдоменом. Я не уверен, что это правильный способ сделать это, или как это сделать, если это так.

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

Я бы очень признателен за некоторые рекомендации относительно того, как это сделать.

2 ответа

Вам нужно решение, которое может одновременно обслуживать как Node.js, так и Apache, и вы хотите, чтобы Node.js выполнял обратный прокси-сервер. Однако лучше всего использовать программу, предназначенную для обратного прокси (Nginx, HAProxy) для этой работы. Использование Node.js в качестве обратного прокси-сервера будет неэффективным.

Nginx - это то, что я рекомендую. Он прост и очень эффективен. Вы можете иметь сервер Nginx на самом фронте, принимая все запросы.

Вот как вы настраиваете Nginx на обратный прокси-сервер для узла

http://www.nginxtips.com/how-to-setup-nginx-as-proxy-for-nodejs/

И вот как настроить Nginx на обратный прокси-сервер для Apache

http://www.howtoforge.com/how-to-set-up-nginx-as-a-reverse-proxy-for-apache2-on-ubuntu-12.04

Просто объедините файлы настроек двух, которые позволят вам одновременно обслуживать apache и узел.


Посмотрите эту тему

В то время как он обсуждает некоторые проблемы с использованием http-proxy с WebSockets на <= 0.8.x, если вы этого не делаете, вы должны быть в порядке.

Вы можете создать очень простой прокси-прослушиватель:

var http = require('http'),
 httpProxy = require('http-proxy');

httpProxy.createServer(8888, 'localhost').listen(80);

И создайте серверный сервер следующим образом:

var http = require('http').listen(8888);

Но, конечно, более сложные реализации могут быть достигнуты путем чтения документации http-proxy.

licensed under cc by-sa 3.0 with attribution.