Согласно документации, в server_name можно использовать регулярки.
Понадобилось сделать редирект c урлов вида www.sub.site.ru на sub.site.ru, при этом сохранив работу www.site.ru. sub - доменов более 50.
Сам сайт описан как
server_name site.ru www.site.ru *.site.ru
Сделал отдельный сервер с server_name ~^www\.(w+)\.site.ru$;
по логике - имя корректное. Этот блок идёт выше основного. При этом в него мы не попадаем никогда. Как показало 4 часа ковыряния, "у регэкспов в сервер_нейм приоритет минимальный и туда попадаем если нет ничего лучше". Есть возможность выставить этому регэкспу высокий приоритет? Или только изменить главное описание, сделав его также регэкспом и потеряв в производительности?
Использовать дефолтный сервер не вариант - сайтов на сервере больше 20 плюс "по умолчанию" должно отдавать ошибку. Сайтов с такой системой в дальнейшем также будет больше одного.
Второй вариант - сделать так нелюбимый тут if ($http_host ~* ^www\.w+\.site\.ru)... и как модифицировать $http_host? rewrite меняет только uri.
Третий - через встроенный perl. Не хотелось бы, но если у кого такая схема работает - просьба поделиться вариантами.
четвертый, совсем уж через 1 место - описать каждый www-поддомен в отдельном сервере.. 50+ раз...