ПРОЕКТЫ 


  АРХИВ 


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]

cache


  • To: nginx-ru@xxxxxxxxx
  • Subject: cache
  • From: Andrei Nigmatulin <anight@xxxxxxxxxxxxxxxx>
  • Date: Mon, 13 Nov 2006 14:53:35 +0300
  • Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; d=eyelinkmedia.com; s=m23uiy46; h=Received:From:To:Subject:Date:User-Agent:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-Disposition:Message-Id; b=HT5yyMF/agl7bOvqKworOjXfF0YiKQYFIQTh+Qoytki0sExgVkR2Fk/CRzCNjbYoxLtZABkYQ6x/MYYghH/b/2CLi5ntDLXrTDrL4AsM8kZcfLwPpEqIBPeSeXE8R3whkc9yVJVb26R7Ex8lD8cM8xgd5sfPkPFk21+0mfqgI5Y=

Добрый день, Игорь !

Подскажите пожалуйста, как можно организовать простой кэш на 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"

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

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


-- 
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take


 




Copyright © Lexa Software, 1996-2009.