¿Cómo decirle a nginx que respete el caché del backend? uWSGI

¿Cómo decirle a nginx que respete el caché del backend? uWSGI

Hay unapregunta similarpero la solución no funciona para mí.

Contamos con backend publicitario nginx y uWSGI. Necesitamos que nginx almacene en caché la respuesta del backend de acuerdo con lo que hay en el encabezado de la respuesta.

Por ejemplo, corro curl -I https://example.com/api/project_data/. Usando tcpdumpveo que el backend responde:

HTTP/1.1 200 OK
Content-Type: application/json
Vary: Accept, Accept-Language, Origin
Allow: GET, HEAD, OPTIONS
Cache-Control: public, max-age=3600
X-Request-ID: 6aa...0d99
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Set-Cookie:  longterm_session=45c6...67; Domain=example.com;

Sin embargo, la respuesta no se almacena en caché y nginx contacta al backend cada vez que se recibe la solicitud.

La configuración de nginx:

http {
        uwsgi_cache_path /var/local/nginx_cache levels=2:2 use_temp_path=off inactive=1h keys_zone=mycache:20m ;
....

  server {
    ....
    uwsgi_cache mycache;
    uwsgi_cache_key "$request_method$request_uri";

    location /api/project_data/ {
      add_header X-Cache $upstream_cache_status;
      add_header Pragma "public";
      uwsgi_pass 127.0.0.1:49002;
      include uwsgi_params;

      uwsgi_cache mycache;
      uwsgi_cache_key "$request_method$request_uri";

    }

Dupliqué uwsgi_cachesolo para estar seguro porque, según yo, algunas directivas no se heredan location. Además, está x-cache: MISSen la respuesta que nginx envía al cliente.

¿Qué estoy haciendo mal?

Respuesta1

Documentos de Nginxdeclarar explícitamenteeso

Si el encabezado incluye el campo "Establecer cookie", dicha respuesta no se almacenará en caché.

Tendría que hacer que su aplicación no envíe cookies para que la respuesta correspondiente se almacene en caché, por razones obvias: las cookies son datos adicionales tanto para el cliente como para el servidor, al igual que, por ejemplo, el cuerpo de la respuesta.

información relacionada