Nginx. Anular el encabezado en el objeto almacenado en caché, ¿es posible?

Nginx. Anular el encabezado en el objeto almacenado en caché, ¿es posible?

Mi equipo usa nginx concache. El problema es que la aplicación en sentido ascendente envía algunos encabezados que nos gustaría anularen el objeto almacenado en caché. Se pueden ver los encabezados guardados en el objeto almacenado en caché si se busca en el caché la clave (o parte de la clave). Por ejemplo

cd /var/cache/nginx/test
grep -inr part_of_key *
Binary file 6/29/7bcd0cd0aadfd536cdd7183cd8b77296 matches

uno puede entonces hacer

strings 6/29/7bcd0cd0aadfd536cdd7183cd8b77296
# content with keys, cached headers and so on

La configuración de nginx está (simplificada)

# part of server1
  location / {
    proxy_pass            http://upstream;
    proxy_cache           zone1;
  }

Ahora conozco la directiva proxy_hide_headery traté de eliminar (y sustituir) los encabezados en el objeto almacenado en caché, pero no funciona. Parece que el proceso es el siguiente:

  1. el upstream envía la respuesta
  2. nginx lee la respuesta
  3. la respuesta se guarda en un archivo en caché
  4. Se realizan operaciones en la respuesta, como eliminar encabezados, para enviar la respuesta al cliente.

Por lo tanto, parece que no hay forma de afectar los encabezados de la respuesta antes de que se guarde en la memoria caché.

Una solución alternativa que podría desarrollar es simplemente colocar otro servidor nginx en el medio, para que pueda cambiar los encabezados, que luego se guardarán en el caché en formato server1.

Ejemplo

# part of server1
  location / 
    proxy_pass            http://upstream-modify-headers;
    proxy_set_header      Host modify.headers;
    proxy_cache           zone1;
  }

# the upstream
upstream upstream-modify-headers {
  server 127.0.0.1:80;
}
#the host that modifies the headers
server {
  listen *:80;


  server_name           modify.headers;

      add_header "cache-control" "public, max-age=10, must-revalidate";

  ...

  location / {
    proxy_pass            http://upstream;
    proxy_hide_header     cache-control; #one example header that should be modified in the cache
  }
  ...
  allow 127.0.0.1; #only locally available
}

Esto funciona, pero requiere hosts nginx adicionales.¿Es posible, en cambio, anular los encabezados en el objeto almacenado en caché dentro del mismo servidor nginx, sin agregar uno adicional en sentido ascendente?

Respuesta1

Parece que estás buscando proxy_hide_headeruna directiva.

Respuesta2

Como solución alternativa, intente agregar una marca de fecha en los encabezados. Agregas y luego podrás diferenciar qué encabezados provienen del caché y cuáles son nuevos (comparando en el registro de acceso con otras marcas de tiempo)

información relacionada