Welcome! Log In Create A New Profile

Advanced

Re: try_files и if

Maxim Dounin
February 12, 2013 10:22AM
Hello!

On Tue, Feb 12, 2013 at 03:35:34PM +0200, Roman wrote:

> 12.02.2013 12:41, Maxim Dounin пишет:
> >Hello!
> >
> >On Tue, Feb 12, 2013 at 10:10:36AM +0200, Roman wrote:
> >
> >>Добрый день,
> >>у меня имеется nginx version: nginx/1.0.12 и
> >>я конечно же читал сей замечательный документ :
> >>http://wiki.nginx.org/IfIsEvil
> >>
> >>Но очень хочется такого функционала:
> >>
> >>
> >> map $http_referer $flag {
> >> default 0;
> >> "~*domain.com" 1;
> >> ...
> >> ...
> >> }
> >>
> >>...
> >>
> >> location ~* ^/([a-z0-9\-]+)/ {
> >> try_files $uri $uri/ /catalog/$1/best/index.html =404;
> >> root /home/wwwroot;
> >> if ($flag)
> >> {
> >> add_header Set-Cookie ...;
> >> }
> >>
> >> }
> >>Но естественно такой вариат с try_files & if не работает, сломал
> >>голову всю и никак не могу придумать альтернативного решения,
> >>может кто подскажет какую идею?
> >Сделать map вида:
> >
> > map $flag $cookievalue {
> > 0 "";
> > 1 "...";
> > }
> >
> >И дальше add_header безусловно:
> >
> > add_header Set-Cookie $cookievalue;
> >
> >Если в результате map'а в переменной $cookievalue получится пустая
> >строка - соответствующий заголовок клиенту отослан не будет, если
> >получится непустая - будет, что, насколько я понимаю, и требуется
> >в задаче.
> >
>
> Большущее спасибо,
> тогда, если можно, вот еще такой вопросик,
>
> perl_set $uidset '
> sub {
> use Time::HiRes qw(gettimeofday);
> ($sec,$milli) = gettimeofday;
> return (($sec & 0x000FFFFF) << 8)+($milli & 0x000000FF)
> . ",".time();
> }
> ';
> ...
> map $flag $cookievalue {
> 0 "";
> 1 "cookie1=$uidset; Max-Age=86400; path=/;";
> }
> в таком варианте при $flag = 1 в $cookievalue попадает срока как есть т.е.
> cookie1=$uidset; Max-Age=86400; path=/;
>
> есть ли какие механизмы запихнуть в вычисляемое значение map
> ($cookievalue), уже посчитанное значение переменной $uidset?

В правой части map сейчас может быть либо строка, либо переменная
(одна). Соответственно для того, чтобы сделать строку, состоящую
из переменных и текста, нужно делать это внешними по отношению к
map'у средствами. Если всё равно используется perl_set - я бы на
нём всё это и сделал, и возвращал $cookievalue в нужном виде
perl'ом.

Альтернативный вариант - сделать что-нибудь вроде

map $flag $cookievalue {
0 "";
1 $uidset_cookie;
}

и в соответствующем location'е

set $uidset_cookie "cookie1=$uidset; Max-Age=86400; path=/;";

Но такое решение будет менее эффективно, т.к. set будет
отрабатывать всегда, даже если $flag == 0.

--
Maxim Dounin
http://nginx.com/support.html

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

try_files и if

Roman February 12, 2013 03:12AM

Re: try_files и if

Maxim Dounin February 12, 2013 05:42AM

Re: try_files и if

Roman February 12, 2013 08:36AM

Re: try_files и if

Maxim Dounin February 12, 2013 10:22AM

Re: try_files и if

Roman February 13, 2013 03:18AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 310
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready