Нарушает ли отсутствие заголовка Set-Cookie Nginx proxy_cache?
У меня есть прокси-сервер Nginx для службы Node.js, который читает несколько файлов и генерирует ответ. Я хочу, чтобы Nginx добавил для меня базовые кеши:
upstream my_http_servers {
server 127.0.0.1:7001;
}
proxy_cache_path /var/cache/nginx-combo levels=1:2 keys_zone=my_cache:10m inactive=1w max_size=200m;
server {
listen 80;
proxy_cache my_cache;
location / {
# %%%%%%%%%%%%% SPECIAL LINE OF IGNORING %%%%%%%%%%%%%
# proxy_ignore_headers Expires Cache-Control Set-Cookie Vary;
# expires 24h;
proxy_cache_lock on;
proxy_cache_lock_timeout 10s;
proxy_cache_key $scheme://$host$uri$is_args$query_string;
proxy_cache_valid 200 1m;
proxy_cache_valid any 5s;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504 http_429;
proxy_read_timeout 10s;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Expose-Headers "X-Log, X-Reqid";
add_header Access-Control-Max-Age 2592000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
add_header X-Proxy-Cache $upstream_cache_status;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://my_http_servers;
}
}
Я пытался нажать «Проверить», и он всегда отвечал:X-Proxy-Cache: EXPIRED
илиX-Proxy-Cache: MISS
, что вызвало сильное давление на Node.js, поскольку слишком много запросов не попало в кеш.
Затем я также протестировал его в Chrome и неожиданно обнаружилX-Proxy-Cache: HIT
было создано после первого ответа.
Итак, я догадался о разнице в заголовках HTTP отwrk
/curl
и Chrome вызвал разницу. После нескольких попыток я обнаружил, что разница имеет значение, и ее можно было решить с помощьюproxy_ignore_headers Set-Cookie
чтобы гарантировать постоянное поведение Nginx с обеих сторон.
И вопрос, почему? Почему Nginx обрабатывает запросы с/безSet-Cookie: ...
иначе? Что происходит, когда Nginx решает, использовать или нет кеш?