Запускать несколько серверов на одном порту

19

Я хотел бы запустить сервер XAMPP и сервер Nodejs на порту 80.

Если сервер получает HTTP-запрос, XAMPP будет обрабатывать его, если сервер получает запрос Websocket, а затем Nodejs.

Как это возможно? Если порт уже используется, я не могу запустить другую серверную программу.

ИТЭР-АТОР
источник

Ответы:

45

Для этого вам понадобится обратный прокси-сервер, например Apache 2.4. с mod_proxy_wstunnel .

Используйте его в качестве внешнего интерфейса, а затем туннелируйте соединения с соответствующим внутренним интерфейсом.

Свен
источник
22

Только один процесс может прослушивать конкретный порт для одного и того же IP-адреса и протокола, поскольку в противном случае операционная система не будет знать, в какой процесс отправить полученный пакет.

Чтобы достичь желаемого, вам нужно будет использовать обратный прокси-сервер, который будет прослушивать порт 80 и перенаправлять трафик в правильный пункт назначения. Есть несколько способов сделать это. Например, вы можете настроить ваш веб-сервер (Apache) для пересылки запросов WebSocket или вы можете настроить Node.js для пересылки HTTP-трафика. Исследуйте доступные варианты и выберите тот, который соответствует вашим потребностям.

grekasius
источник
3

Помимо опции обратного прокси, которую уже упоминали другие, вы можете иметь несколько IP-адресов, назначенных компьютеру. Это может стоить IPv4 (или просто не быть доступным в зависимости от того, где размещен ваш сервер), но не должно, если вы в состоянии использовать IPv6 (то есть, если люди, подключающиеся к одному или обоим, или к вашим услугам будут поддерживать IPv6) , Таким образом, обе службы могут прослушивать порт 80 по разным адресам.

Поскольку вы упоминаете только порт 80, я предполагаю, что вы не используете HTTPS. Если вы используете опцию обратного прокси-сервера, то вам нужно либо иметь SSL-сертификат с несколькими именами, либо настроить SNI и учитывать тот факт, что некоторые старые клиенты (IE на XP, старые версии Android) не смогут подключиться без ошибок. Многоадресная опция позволяет обойти эту проблему за счет необходимости назначения дополнительных адресов.

Дэвид Спиллетт
источник
Небольшой момент: если вы уже используете NAT для преобразования IP-адреса, вы также можете выполнить перенаправление портов. Например, если вы используете доступный в Интернете сервер Apache и хотите использовать XAMPP для тестирования, запустите Apache на нестандартном порту и запросите внешний порт 80 маршрутизатора NAT на нестандартный порт внутреннего IP-адреса. Это позволило бы запустить XAMPP на порту 80.
Calrion