Edit: A expressão regular server_name e map directive são melhores que esta, que usa o evil if directive .
A variável $ host contém o nome do host que o cliente solicitou, embora você precise processar isso um pouco para apenas pegar a parte que você quer. Parece que a única maneira de conseguir isso é com o se e definir as diretivas do módulo Rewrite, por isso tente algo como isto:
server_name *.hostname.com;
if ($host ~* ^([0-9]+)\.hostname\.com$) {
set $proxyhost 192.168.56.$1;
}
proxy_pass http://$proxyhost;