> Тогда возвращаемся к ответу Максима. Все - то есть, абсолютно -
> параметры, от которых зависит или может зависеть ответ бекенда,
> должны быть включены в ключ кеша.
Я не понимаю, как добавления в ключ кеша хедера if_none_match, может решить проблему, автоматического удаления из запроса к бекенду клиент хедеров if_none_match и if_modified_since, вы же понимаете чтобы работать с клиентским кешем бекенду нужны клиентские заголовки if_none_match и if_modified_since, но Nginx их удаляет, если в папке Nginx Кеша нет файла по этому ключу, данного файла там никогда не будет, потому что этот uri всегда генерируется с Cache-Control: private.
Да мы можем в конфиге прописать
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;
но тогда мы получим кеширования страницы в 304 статусе, если в момент запроса в папке кеша Nginx не будет файлов кеша по этому ключу, но браузер выслал правильные и актуальные заголовки и получил от бекенда статус 304, Nginx благополучно положит этот ответ в свой файл кеш. Вот в чем дело и ключ Кеша здесь не причем.