Есть досадные мелочи, которые хотелось бы исправить, при включении fastcgi_cache_revalidate on, параметр HTTP_IF_MODIFIED_SINCE, всегда отправляется на сервер, даже если кеша нет, бекенду будет отправлен параметр с пустым значением.
По стандартам HTTP при отсутствии кеша, клиент не должен отправлять заголовок If-Modified-Since. Более правильно если Nginx так же как и браузеры, при отсутствии кеша не будет передавать в бекенд пустой хедер If-Modified-Since, т.е нет кеша нет хедера, сейчас приходится в конфиге писать fastcgi_param HTTP_IF_MODIFIED_SINCE $upstream_cache_last_modified if_not_empty; чтобы пустой хедер не приходил, как этого требует стандарт. Настроить subsecond ревалидацию в Nginx по стандартам HTTP тоже невозможно. Если бекенд отдает заголовок Cache-Control: max-age=0 и/или Expires: -1 Nginx воспринимает их как указания не кешировать ответ, но по стандартам эти заголовки не запрещают кешировать они указывают клиенту что ответ сервера можно кешировать, но он сразу же устаревает и следущий запрос должен пройти ревалидацию, т.е клиент должен каждый запрос отправлять с хедерем If-Modified-Since. Мы нашли способ, как заставить Nginx кешировать такие ответы, отправить ему хедер X-Accel-Expires: @$time-1 Тогда Nginx ведет себя правильно, т.е. так же как браузеры, которым достаточно отправить Cache-Control: max-age=0 Если, есть более красивое решения вместо X-Accel-Expires: @$time-1, хотелось бы его узнать. Во всем остальном ревалидация работает отлично, ждем с нетерпением реализацию If-None-Match :) С наличием ETag, будет все очень классно и правильно! Posted at Nginx Forum: http://forum.nginx.org/read.php?21,244991,244991#msg-244991 _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru