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 tcpdump
veo 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_cache
solo para estar seguro porque, según yo, algunas directivas no se heredan location
. Además, está x-cache: MISS
en 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.