Re: Повторное использование map при изменении исходной переменной

Vladimir Latyshev latysheff at gmail.com
Wed Jul 22 12:57:09 MSD 2009


Попробовал. К сожалению, не помогает в моем случае. Привожу кусок конфига,
если еще планируете побороться :)

map $ext_host_ext_point $group {
        include /etc/nginx/maps/group.txt;
}
...
if ($uri_x ~ ^/+(.*)$) { set $ext_point default; set $request_x $1; } #
первое правило
if ($uri_x ~ ^/+([^/]+)/+(.*)$) { set $ext_point $1; set $request_x $2; } #
второе правило, может перекрыть первое
# ищем группу в map 1-й раз
set $ext_host_ext_point $ext_host/$ext_point;
set $tmp $group:$uri_x;
# если соответствия не нашли, откатываемся на первое правило, менее
приоритетное правило...
if ($tmp ~* ^:/+(.*)$ ) { set $ext_point default; set $request_x $1; }
# ... и ищем группу снова
set $ext_host_ext_point $ext_host/$ext_point;
# если и повторно не нашли, то запрещаем
if ($group = "") { set $group "forbid"; }


Если добавить
map $ext_host_ext_point $group1 {
        include /etc/nginx/maps/group.txt;
}
и поменять set $tmp $group1:$uri_x;
то все работает как надо.

В общем-то, считаю решение с дублирующим map {} вполне приемлемым, хотя и не
оптимальным.

22 июля 2009 г. 12:10 пользователь Igor Sysoev <is at rambler-co.ru> написал:

> On Tue, Jul 21, 2009 at 12:09:50PM +0400, Vladimir Latyshev wrote:
>
> > Зависящая переменная была проинициализирована (к ней обратились), после
> > этого исходная переменная изменилась. Возможно ли повторное использование
> > карты, так сказать, map reuse? Или придется создавать два блока map { ...
> }
> > ?
>
> Можно попробовать прилагаемый патч, но тут есть ещё проблема с
> кэшируемостью
> исходной переменной.
>
>
> --
> Игорь Сысоев
> http://sysoev.ru
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20090722/f88456a0/attachment.html>


More information about the nginx-ru mailing list