Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re[2]: if нужен.
Здравствуйте, Валентин.
Ещё наткнулся на неочевидные грабли.
Есть конфиг
# for genereting file name in Content-Disposition header
map $request_filename $filename {
default "";
"~*(?<fn>[^/]+\.(?:gif|jpe?g|png))$" $fn;
}
map $host $sitename {
hostnames;
default "";
*.site1.ru "Site1.ru ";
*.site2.ru "Site2.ru ";
}
map $host $disposition {
hostnames;
default "";
d.* $foo;
}
Есть локейшн, в котором потом используются $1 и $2 из его регэкспа:
location ~* "^/([^/]+)/(.*)" {
proxy_pass http://$1:80/$2;
}
Если в него вставить строчки
set $foo 'attachment; filename="$sitename$filename"';
add_header Content-Disposition $disposition;
, то в $1 и $2 заносится мусор из map-ов, которые используются для
расчёта переменных $foo, $sitename и $filename . Причём не важно, выше
или ниже proxy_pass написать эти строчки. Это как бы совсем не
очевидно и при большом конфиге можно долго искать причины такого
поведения.
По хорошему у $1 и $2 могла бы быть область видимости, хотя их
глобальность тоже чем-то полезна. Не могу придумать, как было бы
правильно, но сейчас как-то не очень правильно. В том же перле, если
$1 используется в одной функции, то мне не надо думать, что она затрёт
$1 в вызвавшей функции или сама затрётся функцией, которую вызывает.
Городить именованные переменные в регэкспах конечно можно, но всё это
костыли какие-то и они не помогают, ибо $1 всёравно почему-то
портится.
nginx/1.3.0
--
С уважением,
Михаил mailto:postmaster@xxxxxxxxxxxxx
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru
|