O que você quer é basicamente um proxy reverso, recebendo conexões do mundo e encaminhando-as para servidores internos com base no nome. Isso pode ser conseguido usando Apache, nginx, verniz e uma infinidade de outros servidores.
Sugiro ficar com o nginx ou o Apache. Eles são fáceis de configurar e eficientes.
Este artigo discute o proxy com nginx. Como você pode ver, tem uma sintaxe bastante simples. O que você precisa fazer é basicamente configurar um vhost em nginx para cada subdomínio e fazer proxy de tudo para o novo local.
O navegador que acessa sua página só se comunicará com o proxy. O proxy encaminhará todas as solicitações para o servidor interno que manuseia esse subdomínio.