ПРОЕКТЫ 


  АРХИВ 


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]

HELP! fastcgi_cache_bypass - оно вообще работает хоть у кого-нит ь?


  • To: nginx-ru <nginx-ru@xxxxxxxxx>
  • Subject: HELP! fastcgi_cache_bypass - оно вообще работает хоть у кого-нит ь?
  • From: Влад Максимов <vladsm@xxxxxxx>
  • Date: Thu, 24 Feb 2011 15:19:52 +0300
  • Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.ru; s=mail; h=Message-Id:Content-Transfer-Encoding:Content-Type:Reply-To:Date:Mime-Version:Subject:To:From; bh=Le4G/ND4T7lzbyK1JLy7WBr9YeRBJ7uJDeBzQ0LAcxY=; b=dWPAJsVTm2axXavtL/JtE+HeiQHy3VyzciZqHhXftPusEmnS+yJBFQLYujDYNOhFH5uIarV8YmxHcNj7AsiQAGWl39aNtX0IdDYD4W/tMCey2ff8/Rymx/yg9a2Ecpi6;

Наткнулся на неприятное: не работает fastcgi_cache_bypass.
Или я просто не умею его готовить, что тоже возможно.

Стандартная схема frontend->backend

...
    location /cached/block/ {

      rewrite ^/cached(/.+)$ $1 break;

      include fastcgi_params;

      fastcgi_pass        localhost:9005;
      fastcgi_param     SERVER_NAME     $host;
      fastcgi_param     SCRIPT_FILENAME $backend_root_index;
      fastcgi_param     REQUEST_URI     $uri;

      fastcgi_cache             testcache;
      fastcgi_cache_key         "$request_method|$host|$uri";
      fastcgi_cache_valid       200 302 1d;

      fastcgi_no_cache $arg_nocache;
      fastcgi_cache_bypass $arg_nocache;

      fastcgi_cache_bypass $arg_skipcache;
  }
...

Если я правильно понимаю документацию, то при обращении 
http://mydomain.com/cached/block/someData/  - nginx обратится к бэкенду, 
закеширует ответ на 1 день и содержимое ответа отдаст клиенту.
При этом если я обращусь с ?skipcache ( 
http://mydomain.com/cached/block/someData/?skipcache=1 ) то nginx не должен 
искать эти данные в кеше, а должен обратиться на бэкенд за свежими данными, 
после чего уже положить их в кеш и отдать клиенту.

И вот тут начинается самое интересное:
  1. если я обращаюсь http://mydomain.com/cached/block/someData/  - всё 
работает, как и предполагалось - кешируется ответ бэка, и последующим запросам 
клиентов отдаётся всё из кеша
  2. если я обращаюсь http://mydomain.com/cached/block/someData/?skipcache=1 - 
всё ломается. При этом в зависимости от размера ответа бэка, этот ответ 
всё-таки может оказаться в кеше и попасть клиенту (но очень серьёзно побитый), 
или же я в логе получу строчку в духе upstream sent unsupported FastCGI 
protocol version: 118 while reading upstream, client: 192.168.1.5, server: 
some.trashcan.dev, request: "GET /cached/block/someData?skipcache=1 HTTP/1.1", 
upstream: "fastcgi://127.0.0.1:9005", host: "some.trashcan.dev"
  3. однако если я обращусь 
http://mydomain.com/cached/block/someData/?nocache=1 (то есть пробрасывать на 
бэк и при этом не сохранять в кеш) - тоже всё будет работать. 

Что делать? Куда копать? 
Что я пропустил или не понял?

--------------------
nginx -V

nginx version: nginx/0.8.54
built by gcc 4.1.2 20080704 (Red Hat 4.1.2-48)
configure arguments: --with-http_image_filter_module 
--with-http_stub_status_module --with-http_realip_module --with-debug 

nginx: nginx version: nginx/0.9.5
nginx: built by gcc 4.1.2 20080704 (Red Hat 4.1.2-48)
nginx: configure arguments: --with-http_image_filter_module 
--with-http_stub_status_module --with-http_realip_module --with-debug



_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.