Nginx. Substituir o cabeçalho no objeto em cache, é possível?

Nginx. Substituir o cabeçalho no objeto em cache, é possível?

Minha equipe usa nginx comesconderijo. O problema é que a aplicação no upstream envia alguns cabeçalhos que gostaríamos de substituirno objeto em cache. Pode-se ver os cabeçalhos salvos no objeto em cache se pesquisar no cache a chave (ou parte da chave). Por exemplo

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

pode-se então fazer

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

A configuração do nginx é (simplificada)

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

Agora eu conheço a diretiva proxy_hide_headere tentei remover (e substituir) os cabeçalhos no objeto em cache, mas não funciona. Parece que o processo é o seguinte:

  1. o upstream envia a resposta
  2. nginx lê a resposta
  3. a resposta é salva em um arquivo em cache
  4. operações são realizadas na resposta, como remover cabeçalhos, para enviar a resposta ao cliente

Portanto, parece não haver maneira de afetar os cabeçalhos da resposta antes que ela seja salva no cache.

Uma solução alternativa que eu poderia desenvolver é simplesmente colocar outro servidor nginx no meio, para que ele pudesse alterar os cabeçalhos, que eram salvos no cache em formato server1.

Exemplo

# 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
}

Isso funciona, mas requer hosts nginx adicionais.Em vez disso, é possível substituir os cabeçalhos no objeto em cache no mesmo servidor nginx, sem adicionar outro no upstream?

Responder1

Parece que você está procurando proxy_hide_headeruma diretiva.

Responder2

Como solução alternativa, tente adicionar um carimbo de data nos cabeçalhos. Você adiciona e então poderá diferenciar quais cabeçalhos vêm do cache e quais são novos (comparando no log de acesso com outros timestamps)

informação relacionada