У меня nginx и его кеш работают должным образом, за исключением одной незначительной проблемы. Когда запрос выполняется в первый раз, он попадает на исходный сервер, возвращает 200, и nginx кеширует этот ответ. Если я сделаю еще один запрос, я увижу из X-Cache-Status
заголовок, что кеш был поражен. Когда я жду некоторое время, зная, что срок действия кеша истек, я вижу, что nginx ударил мой исходный сервер, выполняя условный GET, потому что у меня proxy_cache_revalidate on;
определены.
Когда я проверяю, изменился ли ресурс в моем приложении на исходном сервере, я вижу, что это не так, и возвращаю 304 с новым Expires
заголовок. Некоторые могут возразить, почему вы возвращаете новый Expires
заголовок, если исходный сервер говорит, что ничего не изменилось, и вы возвращаете 304. Ответ: HTTP RFC говорит, что это можно сделать https://tools.ietf.org/html/rfc7234#section-4.3.4
Одна вещь, которую я заметил, независимо от того, какие заголовки я добавляю или изменяю, когда исходный сервер возвращает 304, nginx выдаст ответ с первым набором заголовков ответа, которые он видел для этого ресурса.
Также, если я изменю Cache-Control:max-age
значение заголовка из первого запроса, когда я возвращаю ответ 304, кажется, что nginx подчиняется новому значению, поскольку мой ресурс кэшируется на это время, однако значение заголовка ответа - это то, что было указано в первом запросе, а не значение, которое я изменил на 304 ответа.
Я бегаю nginx version: nginx/1.10.1