>> 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; > > У вас в конфиге написано: установить заголовки If-None-Match и > If-Modified-Since в запросах к бекенду в полученные от клиента > значения. Ревалидация кеша в таких условиях работать не может по > очевидным причинам.
убрал эти строки. удалил кеш. ристартанул nginx первая загрузка X-My-Cache: MISS (страницы нет в кеше) вторая загрузка X-My-Cache: HIT (есть в кеше, получаю закешированную версию) жду 10 секунд третья загрузка X-My-Cache: EXPIRED (а я ожидаю X-My-Cache: REVALIDATED ) заголовки запроса браузера: GET /product/name HTTP/1.1 Host: site.com Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 Accept-Encoding: gzip, deflate, sdch Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 на всякий случай сделал то же самое через curl: curl -i "https://site.com/product/name" и получил точно такой же результат: первая загрузка X-My-Cache: MISS (страницы нет в кеше) вторая загрузка X-My-Cache: HIT (есть в кеше, получаю закешированную версию) жду 10 секунд третья загрузка X-My-Cache: EXPIRED > На бекенде в РНР, отвечайте http_response_code(304); вместо header('HTTP/1.0 304 Not Modified'); так быстрей и правильней. поправил > Судя по конфигу, у вас проблема с куками, если браузер присылает куки сессии, кеш не работает, curl куки не присылает, ответ отдается из кеша. вроде нет, см выше описание поведения curl при стандартном GET бэкэнд сейчас, к слову, выглядит примерно так: <?php if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ) { http_response_code(304); exit; } // код приложения _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru