> Есть один способ:
> http://www.lexa.ru/nginx-ru/msg30320.html
>
> И второй способ: просто не включать кеширование
> на стороне nginx в тех location`ах, где оно не нужно.
Есть и третий способ
if ($upstream_status = 304) {
set no_cache = 1;
}
fastcgi_no_cache $no_cache;
Ещё как вариант, Nginx вообще не нужно удалять валидаторы из запроса, они всегда должны уходить на бекенд, при получении статуса 304, когда нет файла кеша Nginx, но в заголовке ответа указано что можно кешировать в публичном кеше (не private), только в этом случаи Nginx должен сделать повторный запрос к бекенду без валидаторов для получения нового контента со статусом 200.
Но можно и не делать повторный запрос, со временем придет юзер без валидаторов и бекенд отдаст статус 200, в общем Nginx просто надо научить понимать что заголовки Cache-Control в 304 статусе, не означают что нужно кешировать ответ 304, они означают что нужно использовать прежний закешированый ответ 200, по сути fastcgi_no_cache который я написал выше эту проблему так и решает.
Я понимаю такая схема сложней для Nginx и ему проще просто всегда удалять валидаторы если нет файла кеша, но я же смотрю с точки зрения бекенда, ему лучше если валидаторы всегда приходят.