регулярки в server name

playnet nginx-forum на nginx.us
Пн Июл 2 15:35:03 UTC 2012


Согласно документации, в 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+ раз...

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,228177,228177#msg-228177



Подробная информация о списке рассылки nginx-ru