Execute vários servidores na mesma porta

19

Gostaria de executar um servidor XAMPP e um servidor Nodejs na porta 80.

Se o servidor receber uma solicitação HTTP, o XAMPP o tratará; se o servidor receber uma solicitação Websocket, os Nodejs

Como isso é possível? Se uma porta já estiver em uso, não consigo iniciar o outro programa do servidor.

iter-ator
fonte

Respostas:

45

Você precisaria usar um proxy reverso para fazer isso, por exemplo, Apache 2.4. com mod_proxy_wstunnel .

Use-o como um front-end e, em seguida, encapsule o túnel nas conexões com o back-end apropriado.

Sven
fonte
22

Somente um único processo pode escutar em uma porta específica o mesmo endereço IP e protocolo, porque, caso contrário, o sistema operacional não saberia para qual processo enviar o pacote recebido.

Para conseguir o que você deseja, você terá que usar um proxy reverso que escute na porta 80 e encaminhar o tráfego para corrigir o destino. Existem várias maneiras de fazer isso. Por exemplo, você pode configurar seu servidor web (Apache) para encaminhar solicitações do WebSocket ou configurar o Node.js para encaminhar o tráfego HTTP. Pesquise as opções disponíveis e escolha a que melhor se adapta às suas necessidades.

grekasius
fonte
3

Além da opção de proxy reverso que outros já mencionaram, você pode ter vários endereços IP atribuídos à máquina. Isso pode custar para o IPv4 (ou simplesmente não estar disponível, dependendo do local onde o servidor está hospedado), mas não deve ser possível se você estiver em posição de usar o IPv6 (por exemplo, se as pessoas que se conectam a um ou ambos ou seus serviços serão compatíveis com IPv6) . Dessa forma, ambos os serviços podem escutar na porta 80 em endereços diferentes.

Como você menciona apenas a porta 80, presumo que você não esteja usando HTTPS. Se você estiver usando a opção de proxy reverso, precisará ter um certificado SSL com vários nomes ou configurar o SNI e viver com o fato de que alguns clientes antigos (IE no XP, versões antigas do Android) não conseguirão conectar sem erros. A opção de endereço múltiplo contorna esse problema às custas da necessidade do (s) endereço (s) extra (s) atribuído (s).

David Spillett
fonte
Apenas um pequeno ponto: se você já estiver usando o NAT para traduzir o IP, poderá fazer o redirecionamento de porta também. Por exemplo, se você estiver executando um servidor Apache acessível à Internet e quiser usar o XAMPP para testes, execute o Apache em uma porta não padrão e solicite à porta externa NAT do roteador 80 a porta não padrão do IP interno. Isso permitiria executar XAMPP na porta 80.
Calrion