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: