похоже решение придумано. Не очень хорошее, но работает.
server {
server_name ~^www\.(\w+\.site\.ru)$;
return 301 http://$1$request_uri;
}
server {
server_name site.ru www.site.ru ~^\w+\.site\.ru$;
#главный сайт
}
Для поддоменов на регэкспы будут отрабатывать регулярки, но лучше чем ничего.
Как вообще отлаживать прохождение запроса через nginx? Что-то про debug-log говорили.