Не работает proxy_cache_use_stale ?

Flam Boyant flamboyant2 at gmail.com
Tue May 5 18:08:51 MSD 2009


Всем привет!
Есть nginx-0.7.54 на Linux, есть желание сделать на нем "перманентный кеш" -
то есть если бекенд недоступен, то файл отдается из кеша, даже если он
устарел.
Конфигурация nginx такая -
worker_processes 4;
worker_rlimit_nofile 10240;
error_log logs/error.log;
pid logs/nginx.pid;
events {
  worker_connections 4096;
}

http {
  include mime.types;
  default_type application/octet-stream;

  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  '"$status/$upstream_status" $body_bytes_sent '
  '"$host" "$upstream_addr/$upstream_response_time"';

  access_log logs/access.log main;

  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65 20;

  client_header_timeout 3m;
  client_body_timeout 3m;
  send_timeout 3m;

  client_header_buffer_size 4k;
  large_client_header_buffers 4 4k;

  client_max_body_size 1m;
  client_body_buffer_size 128k;

  output_buffers 4 32k;
  postpone_output 1460;

  proxy_connect_timeout 10;
  proxy_send_timeout 90;
  proxy_read_timeout 90;
  proxy_buffer_size 128k;
  proxy_buffers 4 128k;
  proxy_busy_buffers_size 128k;
  proxy_temp_file_write_size 128k;

  gzip off;

  proxy_cache_key "$scheme://$host$uri$is_args$args:";
  proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=one:10m
inactive=20m max_size=500m;
  proxy_cache one;
  proxy_cache_min_uses 1;
  proxy_cache_valid 200 302 5m;
  proxy_cache_valid 301 1h;
  proxy_cache_use_stale error timeout invalid_header http_500 http_502
http_503 http_504;
  proxy_ignore_headers X-Accel-Redirect X-Accel-Expires Expires
Cache-Control;

  set_real_ip_from 127.0.0.1;
  real_ip_header X-Forwarded-For;

  server {
    listen 9090;
    server_name localhost;
    location / {
      proxy_pass http://localhost:8000;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $remote_addr;
  }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
     root html;
    }
  }
}


Проверяем - создаем простенький test.cgi, запрашиваем его, убежаемся что
файл попал в кеш - тут все ок.
Файл на диске есть -
$ find /usr/local/nginx/cache -type f -exec grep "/cgi/test.cgi:" {} \;
Binary file /usr/local/nginx/cache/e/aa/5fd721f295024d972798697193182aae
matches
$ ls -al /usr/local/nginx/cache/e/aa/5fd721f295024d972798697193182aae
-rw------- 1 nobody nobody 322 May 5 16:43
/usr/local/nginx/cache/e/aa/5fd721f295024d972798697193182aae
Да и по логам видно - файл отдается из кеша.
192.168.7.6 - - [05/May/2009:16:43:00 +0300] "GET /cgi/test.cgi HTTP/1.0"
"200/200" 23 "www.xxx.net" "127.0.0.1:8000/0.057"
192.168.7.6 - - [05/May/2009:16:46:30 +0300] "GET /cgi/test.cgi HTTP/1.0"
"200/-" 23 "www.xxx.net" "-/-"
Ломаем test.cgi - чтобы при запросе выдавал 500-ую ошибку.
Пробуем еще раз - все ок - файл отдается из кеша -
192.168.7.6 - - [05/May/2009:16:47:31 +0300] "GET /cgi/test.cgi HTTP/1.0"
"200/-" 23 "www.xxx.net" "-/-"
Но у нас еще не истекло время хранения. Ждем 5 минут и пробуем еще раз -
192.168.7.6 - - [05/May/2009:16:50:17 +0300] "GET /cgi/test.cgi HTTP/1.0"
"500/500" 593 "www.liga.net" "127.0.0.1:8000/0.039"
То есть несмотря на то что  proxy_cache_use_stale прописана обращения к кешу
нет - идет обращение на бекенд!
Файл в кеше еще есть -
$ find /usr/local/nginx/cache -type f -exec grep "/cgi/test.cgi:" {} \;
Binary file /usr/local/nginx/cache/e/aa/5fd721f295024d972798697193182aae
matches
$ ls -al /usr/local/nginx/cache/e/aa/5fd721f295024d972798697193182aae
-rw------- 1 nobody nobody 322 May 5 16:43
/usr/local/nginx/cache/e/aa/5fd721f295024d972798697193182aae
Просьба ткнуть носом где туплю.
Спасибо!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20090505/8f5d35d9/attachment.html>


More information about the nginx-ru mailing list