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_header
e tentei remover (e substituir) os cabeçalhos no objeto em cache, mas não funciona. Parece que o processo é o seguinte:
- o upstream envia a resposta
- nginx lê a resposta
- a resposta é salva em um arquivo em cache
- 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_header
uma 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)