Попробовал. К сожалению, не помогает в моем случае. Привожу кусок конфига, если еще планируете побороться :)
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 { ... }
> ?
Можно попробовать прилагаемый патч, но тут есть ещё проблема с кэшируемостью
исходной переменной.