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_header
y traté de eliminar (y sustituir) los encabezados en el objeto almacenado en caché, pero no funciona. Parece que el proceso es el siguiente:
- el upstream envía la respuesta
- nginx lee la respuesta
- la respuesta se guarda en un archivo en caché
- 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_header
una 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)