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

Alexandre Kalendarev akalend at mail.ru
Wed Jul 22 19:17:08 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 { ...
> > }
> > > ?
> >
> > Можно попробовать прилагаемый патч, но тут есть ещё проблема с
> > кэшируемостью
> > исходной переменной.

какое-то время я пытался сделать модуль (есть наработки) mmap (от multimap) 
синтаксис конфига:
mmap $host $var1 $var2 $var3{
   server1  /home/www/host1  data1 some_data1
   server2  /home/www/host2  data1 some_data2
   server3  /home/www/host3  data1 some_data3
}
но в одном месте у меня получился хардкод и дело встало. постараюсь доработать и выложить на всеобщее поругание... 

Александр








More information about the nginx-ru mailing list