Re: map regexp непонятки
Maxim Dounin
mdounin at mdounin.ru
Wed Dec 4 12:34:15 UTC 2013
Hello!
On Wed, Dec 04, 2013 at 01:58:41PM +0400, Kalinin Mike wrote:
> Здравствуйте.
>
> Не получается следующая штука
>
> map $connection $upstream_group_num {
> default 0;
> "?<connection>\d{1}&" $connection;
> }
>
> т.е. я хочу взять последнюю цифру из встроенной переменной $connection
> и на ее основе отправлять запрос на определенный апстрим бекендов.
>
> nginx данную регулярку принимает, но всегда выдает default.
>
> Я не врубаюсь как он их применяет. Как заставить nginx ее отрабатывать?
Проблемы конфигурации, которую вы пытаетесь написать:
1. У вас map'е используется не регулярное выражение, а константная
строка. Чтобы было регулярное выражение - перед ним должне быть
указан символ "~", см. http://nginx.org/r/map/ru.
2. Даже если сделать регулярное выражение из того, что у вас
написано - работать не будет, т.к. то, что у вас написано -
невозможно скомпилировать:
$ pcretest
PCRE version 8.33 2013-05-28
re> /?<connection>\d{1}&/
Failed: nothing to repeat at offset 0
re>
3. Не надо пытаться менять значение переменной $connection. Толку
не будет, а плохо - может.
Правильно как-то так:
map $connection $upstream_group {
default 0;
"~(?<foo>\d)$" $foo;
}
Впрочем, я бы рекомендовал посмотреть вместо этого в сторону split_clients,
http://nginx.org/ru/docs/http/ngx_http_split_clients_module.html
--
Maxim Dounin
http://nginx.org/en/donation.html
Подробная информация о списке рассылки nginx-ru