Acho que há alguns conceitos em jogo aqui - em primeiro lugar, você normalmente só pode ter um aplicativo em uma porta por endereço IP. Existem alguns softwares que podem manipular o envio de coisas para outros servidores também.
Então vamos começar no começo
No mais simples, a sua topografia se parece com isso
Internet+-----------> consumer router +----------> Host+--------------> VM
Você precisa de um endereço IP roteável (não NAT) para a sua conexão com a Internet e, normalmente, você pode verificar isso no seu roteador. Aponte seu ipv4 Um registro neste.
Você tem duas opções sobre como configurar seu host e VM - um NAT (o que significa que você precisa encaminhar portas de seus hosts para sua VM) ou "em ponte" onde sua VM atua como uma máquina física separada. Eu prefiro ponte.
Se você optar pelo NAT em suas VMs, será necessário redirecionar duas vezes a porta, do roteador para o host e do host para a VM.
Se você quiser fazer isso como uma rede com ponte, basta encaminhar a porta que deseja usar para sua VM.
Normalmente, os servidores da Web usam a porta 80, mas às vezes essa porta é bloqueada.
Agora, para dois servidores da Web, fica complicado. A melhor maneira (talvez apenas uma maneira) de ter dois servidores Web separados é ter um servidor terceiro , rodando como um proxy
ngnix é a opção mais popular para isso - essa questão de falha de servidor cobre o processo , mas basicamente seu terceiro servidor fica lá passando o tráfego para o servidor certo baseado no nome do domínio. Isso usa virtualhosts e ngnix funcionando de forma bastante eficiente como um proxy reverso.
Você também pode configurar dois virtualhosts com diferentes diretórios raiz (e um servidor da web). Você não teria necessariamente que compartilhar bancos de dados (que poderiam estar em suas próprias VMs). Essa seria a maneira inteligente de fazer isso.