curl -X GET -I -H "Cache-Control: no-cache" не обходится

Я делаю следующее

$ curl -X GET -I -H "Cache-Control: no-cache" https:/myserver/myimage.jpg
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Wed, 24 Jun 2015 22:55:31 GMT
Content-Type: image/jpeg
Content-Length: 37502
Connection: keep-alive
Etag: "wzsdm-1434973626-37502-1204291434"
Cache-Control: max-age=604800, public
Expires: Wed, 01 Jul 2015 22:43:01 GMT
X-Proxy-Cache: HIT

Где я ожидаю получить следующее вместо

X-Proxy-Cache: BYPASS

Моя конфигурация на Nginx выглядит следующим образом:

   location ~* \.(?:jpg|jpeg|gif|png|pdf|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ { 
      proxy_cache my_zone;
      add_header X-Proxy-Cache $upstream_cache_status;

      include proxy_params;
      proxy_pass http://my-backend;
   }

Есть ли какая-либо конфигурация, которую я мог пропустить?

1 ответ

По умолчанию кеш Nginx не учитывает Cache-Control:no-cache заголовок запроса, ни Pragma:no-cache заголовок запроса. Вы должны явно настроить Nginx для обхода кэша и передачи запроса на исходный сервер, когда пользовательский агент отправляет эти заголовки запроса.

Добавьте следующие строки в ваш файл конфигурации:

proxy_cache_bypass $http_pragma;
proxy_cache_bypass $http_cache_control;

Из руководства по кэшированию Nginx:

Как NGINX обрабатывает заголовок Pragma?

Заголовок Pragma:no-cache добавляется клиентами, чтобы обойти все промежуточные кэши и сразу перейти к исходному серверу для запрошенного контента. NGINX по умолчанию не поддерживает заголовок Pragma, но вы можете настроить эту функцию с помощью следующей директивы proxy_cache_bypass:

Другие вопросы по тегам