O que você precisa fazer para que isso funcione é ter um único servidor web existente (ou um separado que seja dedicado à tarefa) configurado como um proxy reverso.
Ele seria responsável por obter a solicitação no endereço público, ler o cabeçalho do host e, em seguida, fazer proxy da solicitação para o endereço privado apropriado, dependendo do host que foi solicitado.
Pacotes de software populares para essa tarefa são o Apache (você pode usar sua instância existente), nginx ou HAProxy. Há muitas informações em perguntas aqui sobre como configurá-las de forma adequada (" proxy reverso " é o termo de pesquisa que será exibido você está lá), mas se você tiver um desses pacotes de software específicos em mente, poderei editar essa resposta com um exemplo de configuração.
Editar : exemplo da configuração do Apache:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName apache.domain.org
ServerAlias www.apache.domain.org
# For this one, we'll imagine that you want to serve these resources from
# the local server. If you want do use a separate Apache instance instead,
# then copy one of the other hosts for this one.
DocumentRoot "C:\path\to\site\files"
<Directory "C:\path\to\site\files">
Order allow,deny
Allow from all
</Directory>
# Any other directives you need for the content here
</VirtualHost>
<VirtualHost *:80>
ServerName iis.domain.org
ServerAlias www.iis.domain.org
# Replace the URL below with the URL of the IIS server - make sure
# to keep the trailing slash.
ProxyPass / http://10.x.x.1:80/
ProxyPassReverse / http://10.x.x.1:80/
</VirtualHost>
<VirtualHost *:80>
ServerName tomcat.domain.org
ServerAlias www.tomcat.domain.org
# Replace the URL below with the URL of the Tomcat server - make sure
# to keep the trailing slash.
ProxyPass / http://10.x.x.2:8080/
ProxyPassReverse / http://10.x.x.2:8080/
</VirtualHost>