Com nginx você pode usar algo como seguir:
server {
server_name name1.domain.com;
location / {
proxy_pass http://localhost:8000;
}
}
server {
server_name name2.domain.com;
location / {
proxy_pass http://localhost:8001;
}
}
server {
server_name name3.domain.com;
location / {
proxy_pass http://localhost:8002;
}
}
BTW, existe outro método para obter o mesmo efeito usando a diretiva map :
map $http_host $port {
hostnames;
default 8000;
name1.example.com 8000;
name2.example.com 8001;
name3.example.com 8002;
}
server {
listen 80;
server_name ~^name\d.example.com;
location / {
proxy_pass http://127.0.0.1:$port;
}
}