On Fri, Oct 09, 2009 at 09:35:20AM +0300, Gena Makhomed wrote:
> Igor Sysoev wrote:
>
> >> Может быть, что-то типа
> >>
> >> if (...) {
> >> fastcgi_no_cache;
> >> }
> >>
> >> было бы универсальнее?
> >
> >> (А в идеальном мире - возможность вписыватьлюбые директивы fastcgi_cache*
> >> внутрь iif-ов.)
> >
> > Сейчас именно конструкция "if (...) { }" - это хак внутри nginx'а.
> > Поэтому и любые директивы внутри if и не разрешены, а те, что разрешены
> > не всегда работают так, как ожидается.
> >
> > Я скорее сделаю предикаты типа
> >
> > fastcgi_no_cache "$http_pragma == 'no-cache' && $trusted_addresses";
> >
> > чем буду лечить "if (...) { }".
>
> конструкция "if (...) { }" является нежелательной, потому что
> создается скрытый location, и не все работает так как ожидалось.
>
> может быть вместо синтаксиса
>
> fastcgi_no_cache "$http_pragma == 'no-cache' && $trusted_addresses";
>
> limit_conn conn=5 zone=resp_zone if=$limit_conn;
>
> сделать обобщенный вариант по аналогии с perl:
>
> простая-директива if сколько-угодно-сложное-условие;
>
> в этом случае не нужно будет делать скрытый location
> для if и останется возможность для развития, если в будущем
> будут добавлены функции, например, md5( ), логические операторы и т.п.
>
> fastcgi_no_cache if "$http_pragma == 'no-cache' && $trusted_addresses";
>
> limit_conn conn=5 zone=resp_zone if $limit_conn;
>
> PS http://perldoc.perl.org/perlsyn.html#Statement-Modifiers
Да, я планировал добавить if в большинство директив.
--
Игорь Сысоев
http://sysoev.ru