Hosts virtuais em vez de IPs separados?

1

Estive imaginando se é possível hospedar vários aplicativos usando uma única porta em um endereço IP. Eu estou querendo dizer um método semelhante ao Apache Virtual Hosts onde você pode atribuir domínios / subdomínios a diretórios específicos, embora eu queira fazer isso onde eu possa hospedar vários aplicativos usando uma porta, mas tenha um subdomínio que determine qual aplicativo você está conectando para.

Um exemplo de como isso funcionaria na minha cabeça é:

app_server.exe (Instance 1): 111.111.111.111:9999
app_server.exe (Instance 2): 111.111.111.111:9999

Então, se eu me conectar a app1.example.com , ele se conectará a Instance 1 , enquanto app2.example.com se conectaria a Instance 2 .

Eu não tenho idéia se isso é realmente possível ou não, mas eu tenho aparência e não tenho idéia do que seria mesmo chamado, então esta é a minha melhor aposta.

    
por Jordan 27.08.2015 / 01:57

1 resposta

1

Sim, isso pode ser feito, desde que o protocolo em nível de aplicativo em uso saiba com qual nome estava conectado. O HTTP sabe disso, devido ao cabeçalho Host: . O TLS sabe disso (agora), por causa da extensão "Server Name Indication". Eu acredito que o FTP pode saber disso, com base em alguma extensão de protocolo, mas se você ainda estiver usando o FTP, estará condenado.

Se o protocolo não tiver a capacidade de indicar qual nome foi usado, você não poderá fazer isso, porque todo o servidor sabe quando uma conexão é feita é o IP de origem e destino / port estão envolvidos. Tudo o resto precisa passar em um nível mais alto.

Um ponto sobre a implementação proposta: você precisará ter um serviço único atendendo na porta que recebe as conexões, analisa os dados de entrada o suficiente para determinar qual nome foi solicitado , e então (e somente ) pode encaminhar a solicitação para diferentes instâncias do aplicativo para processamento. Se essas instâncias forem processos separados, então alguns meios de comunicar a solicitação ao backend que a manipulará (como proxy, ou, se você estiver lidando com um design de protocolo realmente bom, handoff de soquete) , mas se você implementar os vários manipuladores no mesmo processo (digamos, com módulos de configuração ou dinamicamente carregáveis), então você pode simplesmente criar uma estrutura de dados com a solicitação e passá-la para o que quiser lidar com ela.

    
por 27.08.2015 / 02:03