Nginx ignores proxy_no_cache
Kirill A. Korinsky
kirill at korins.ky
Sun Apr 7 11:36:21 UTC 2024
Greetings,
Let assume that I would like behavior on LB from the backend and force it to
cache only resposnes that have a X-No-Cache header with value NO.
Nginx should cache a response with any code, if it has such headers.
This works well until the backend is unavailable and nginx returns a
hardcoded 502 that doesn't have a control header, but such a response is
cached anyway.
Here is the config that allows to reproduce the issue:
http {
default_type application/octet-stream;
proxy_cache_path /tmp/nginx_cache keys_zone=the_zone:1m;
proxy_cache the_zone;
proxy_cache_valid any 15m;
proxy_cache_methods GET HEAD POST;
add_header X-Cache-Status $upstream_cache_status always;
map $upstream_http_x_no_cache $no_cache {
default 1;
"NO" 0;
}
proxy_no_cache $no_cache;
upstream echo {
server 127.127.127.127:80;
}
server {
listen 1234;
server_name localhost;
location / {
proxy_pass http://echo;
}
}
}
when I run:
curl -D - http://127.0.0.1:1234/
it returns MISS on the first request, and HIT on the second one.
Here I expect both requests to return MISS.
--
wbr, Kirill
More information about the nginx
mailing list