ПРОЕКТЫ 


  АРХИВ 


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: Bug ? 304 status - Cache-Control


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: Bug ? 304 status - Cache-Control
  • From: "S.A.N" <nginx-forum@xxxxxxxx>
  • Date: Mon, 06 Jan 2014 03:35:26 -0500
  • Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=selenium.jlkhosting.com; s=x; h=Date:Sender:From:References:In-Reply-To:Message-ID:Content-Transfer-Encoding:Content-Type:Subject:To; bh=YyPSO+zOgVIIMSagVtKZgAKder3E0gPOa+QXUnID8nY=; b=Ayfzqt7ACotUwd9p2d5+Fm9c9fZVlvz+mXa7TZJZPvFNHWHhGGpuQx9YQAApctMqMJxD3/GSA2Xjg/XYyysl+0aWJSHNftLN/TWgmLO3d9EH0cLU2fqYeGFdR23T/KoDyCsFEIT00XIPL10oRHeXPnFznwyI5LVPtaHd1liBtrU=;
  • In-reply-to: <52C84C98.7030802@kopeyko.ru>
  • References: <52C84C98.7030802@kopeyko.ru>

> > fastcgi_cache_key "$host$uri$is_args$args";
> 
> Это ни разу ни баг - это вы недонастроили.
> 
> Добавьте в ключ кеширования параметр
>    $http_if_modified_since
> и наступит вам счастье.

Я наверно не доступно объяснию суть проблемы.
Попробую объяснить на пальцах :)

Есть uri
/user/bar
Отдает контент с заголовками
Cache-Control: private, max-age=0
Это клиенское кеширования, с постояной ревалидацией на бекенде.
Даные заголовки запрещают Nginx кешировать страницу, никаких файл кеша в
Nginx не создаётся её кеширует только браузер, нам это и нужно на данном
uri.
По этому в нашем конфиге прописана передача от клиента к бекенду заголовков
кеширования, чтобы бекенд мог ревалидировать кеш клиента.
Вот эти строки
fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match if_not_empty;
fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since if_not_empty;
Это работает отлично, но дело в том что эти строчки конфига ломают Nginx
кеширования, из-за них появляется баг с кешированием 304 статуса.

Отключить Nginx кеширования тоже не можем потому что на других uri мы
используем Nginx кеширования, например uri
/news/list
Отдает контент с заголовками
Cache-Control: public, max-age=1
Эта страница должна попадать в кеш Nginx.
Имино с этой страницей и будут проблемы, если в папке кеша Nginx удалится
файл кеша, и прийдет запрос от браузера с актуальным заголовками
If-Modified-Since и If-None-Match, на этот запрос бекенд ответит 304
статусом и вернет заговок Cache-Control: public, max-age=1, в результате
чего 304 ответ попадет в кеш Nginx.

Добавлять в ключ кеша заголовки If-Modified-Since и If-None-Match
бесмыслено, потому что это не решит проблему просто создаст разные файлы
кеша с той же проблемой, если кто-то не верит пусть проверит.

Что имеем в итоге, директивы
fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match if_not_empty;
fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since if_not_empty;
ломают кеширования Nginx но дают возможность работы с клиент кешированием,
если убрать эти дерективы тогда нормально работает Nginx кеширования, но
пропадает возможность работы с клиент кешированиям.
Нам надо что бы клиент и Nginx кеширования и клиент работали в рамках одного
server{}, это возможно сделать?

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,245951,246054#msg-246054

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


 




Copyright © Lexa Software, 1996-2009.