простая-директива if сколько-угодно-сложное-условие;

Gena Makhomed gmm at csdoc.com
Fri Oct 9 10:35:20 MSD 2009


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

>>> По-хорошему это надо бы делать как-то так:
>>>
>>> fastcgi_no_cache   $cookie_debugMode;
>>> fastcgi_no_cache   $arg_nc;
>>> fastcgi_no_cache   $http_authorization;
>>> fastcgi_no_cache   $http_pragma;
>>>
>>> Возможно, завтра сделаю.
>>>
>>>> 2009/10/6 1nsk.ru <alfa at 1nsk.ru>
>>>>
>>>>> А как обернуть всё это дело в
>>>>>
>>>>> ?
>>>>> if ($http_cookie !~ "user_id") {
>>>>> #кэшируем только гостям
>>>>> }
>>>>>
>>>>> А то в if нельзя fastcgi_store
>>>>>

--
Best regards,
  Gena







More information about the nginx-ru mailing list