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