Executa vários servidores na mesma porta

18

Eu gostaria de executar um servidor XAMPP e um servidor Nodejs na porta 80.

Se o servidor obtiver uma solicitação HTTP, o XAMPP irá tratá-lo, se o servidor obtiver uma requisição Websocket, então o Nodejs

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

    
por iter-ator 27.08.2014 / 14:00

3 respostas

44

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 depois encapsule as conexões para o back-end apropriado.

    
por 27.08.2014 / 14:25
22

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

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

    
por 27.08.2014 / 14:29
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 de onde seu servidor está hospedado), mas não se você estiver em condições de usar o IPv6 (ou seja, se as pessoas conectadas a um ou ambos ou seus serviços forem compatíveis com IPv6) . Dessa forma, os dois serviços podem escutar na porta 80 em endereços diferentes.

Como você menciona apenas a porta 80, presumo que 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 conviver 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 em detrimento da necessidade de endereço (s) extra (s) atribuído (s).

    
por 28.08.2014 / 16:44