ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: Повторное использование ma p при изменении исходной перемен ной
  • From: Vladimir Latyshev <latysheff@xxxxxxxxx>
  • Date: Wed, 22 Jul 2009 12:57:09 +0400
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type; bh=AW0+GMuT+/nhC8C5HuZIQVM9A4UcVa+Z7We1W6O6u0o=; b=pyOfDX3boUw4oq7bAOEIbQ6wy3knQnjAfztsNa15xvLalB7EJdy1U5Cwlbm0gx8rYR il5ocGJxbChj5/M2GJ6jh5J6i+y5TS+xDiAwxCiRr5FSJVtYFX+BEI3oLSrJAeqFSkCM vvg365XYQ7Cb436L0ccV/yibt46MXu+BdHfY4=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=sRvc1subVuzKlFHhNQ+NNsuNjAOCgqJ2KulpRXdLhjrKwq0d52DncLd0cMIGBVRM8q YMS+4zkfBQMVW/ta7aB8bYluqEXQD7br+pmtztYeoFt0bgVa3ZPMgiL23bp0qXgjKR8d QaSs52UohWqO8SU0josDlqeapSwnSOulEoAnM=
  • In-reply-to: <20090722081050.GG36608@xxxxxxxxxxxxx>
  • References: <c08c61670907210109m7beb2c1fib07bb22f3bb644b9@xxxxxxxxxxxxxx> <20090722081050.GG36608@xxxxxxxxxxxxx>

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

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@xxxxxxxxxxxxx> написал:
On Tue, Jul 21, 2009 at 12:09:50PM +0400, Vladimir Latyshev wrote:

> Зависящая переменная была проинициализирована (к ней обратились), после
> этого исходная переменная изменилась. Возможно ли повторное использование
> карты, так сказать, map reuse? Или придется создавать два блока map { ... }
> ?

Можно попробовать прилагаемый патч, но тут есть ещё проблема с кэшируемостью
исходной переменной.


--
Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.