cache
Igor Sysoev
is at rambler-co.ru
Tue Nov 14 00:03:31 MSK 2006
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
More information about the nginx-ru
mailing list