Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re[2]: Повторное использование map при изменении исходной переменной
> Попробовал. К сожалению, не помогает в моем случае. Привожу кусок конфига,
> если еще планируете побороться :)
>
> 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 { ...
> > }
> > > ?
> >
> > Можно попробовать прилагаемый патч, но тут есть ещё проблема с
> > кэшируемостью
> > исходной переменной.
какое-то время я пытался сделать модуль (есть наработки) 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
}
но в одном месте у меня получился хардкод и дело встало. постараюсь доработать
и выложить на всеобщее поругание...
Александр
|