ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: cache



On Mon, 13 Nov 2006, Andrei Nigmatulin wrote:

Подскажите пожалуйста, как можно организовать простой кэш на nginx. Хочется
примерно следующее:

       location /dynamic/ {
                       internal;
                       fastcgi_param  REQUEST_URI      $request_uri;
                       fastcgi_param  CACHE_ROOT       $_cache_root;
                       fastcgi_param  SCRIPT_FILENAME  /path/cache.php;
                       fastcgi_pass   127.0.0.1:9000;
       }

       location / {
                       root $_cache_root;
                       if (!-f $request_filename) {
                               rewrite .* /dynamic/ last;
                       }
                       if ($cached_file_is_too_old) {
                               rewrite .* /dynamic/ last;
                       }
       }

Вся загвоздка в том, как правильно организовать $cached_file_is_too_old. Я
пробовал вот так:

       perl_set $cached_file_is_too_old '
               sub {
                       my $r = shift;
                       if (time() - (stat $r->filename)[9] > 10) {
                               return "1";
                       }
                       return "";
               }
       ';

Но в момент запроса в error_log выдается следующее:

2006/11/12 22:43:25 [error] 23481#0: *1 call_sv("
               sub {
                       my $r = shift;
                       if (time() - (stat $r->filename)[9] > 10) {
                               return "1";
                       }
                       return "";
               }
       ") failed: "Can't call method "filename" on an undefined value at
(eval 1) line 3.", client: 127.0.0.1, server: inspirer.lan, URL: "/5.html",
host: "localhost:8080"

Как можно правильно проверить устаревание файла в моем случае ?

У меня не воспроизводиться. Что показывает
perl -V:usethreads -V:usemultiplicity
?

PS. Приложение таково, что busy locks не существенны, однако по-хорошему их
тоже хочется. Сделать их можно было бы на встроенном перле, однако пробуждать
ожидающие в очереди соединения не представляется возможным без специальной
поддержки со стороны nginx. Даже с одним worker процессом. Скажите, busy
locks вообще сложно сделать в nginx ?

Бизи локи планируются.


Игорь Сысоев
http://sysoev.ru


  • References:
    • cache
      • From: Andrei Nigmatulin

 




Copyright © Lexa Software, 1996-2009.