nginx não retorna 304 no conteúdo em cache

3

Estou usando o nginx como um proxy reverso com um back-end do Apache para manipular alguns arquivos PHP.

Os arquivos retornam os cabeçalhos de expiração corretos e proxy_cache faz um bom trabalho de armazená-los em cache, mas notei que o conteúdo em cache retorna 200 em cada atualização, quando pode ser mais eficiente retornar um 304 nos arquivos em cache .

Os arquivos em questão são gerados pelo PHP. As urls não têm .php nelas como foram melhoradas.

Alguma idéia do motivo pelo qual o nginx pode não estar retornando 304 em visitas repetidas a uma saída em cache do PHP?

Para esclarecer: Ele está usando proxy_cache para caching de páginas PHP dinâmicas (não páginas estáticas de html geradas pelo PHP). Estou definindo cabeçalhos de expiração no arquivo PHP de tempo + 24 horas. Com isso em mente, eu esperava que o nginx pudesse retornar 304s em suas versões em cache durante essa janela de 24 horas.

    
por Don H 29.10.2012 / 13:03

3 respostas

1

Tendo cutucado várias coisas, a resposta foi que eu tinha deixado de declarar um cabeçalho "Last modified" no php. Como a página muda diariamente, defino a data da última modificação para a meia-noite anterior. Agora está retornando 304s como esperado.

    
por 03.11.2012 / 22:27
1

Se o backend do php retornar o cabeçalho do cookie com solicitação, a solicitação será tratada como nova. Tente adicionar esta diretiva à localização do nginx com proxy_pass:

proxy_ignore_headers "Cache-Control" "Expira" "X-Accel-Expires" "Set-Cookie";

    
por 02.11.2012 / 14:08
0

Como o PHP está gerando os arquivos HTML em tempo real, eles são sempre novos (no que diz respeito ao Nginx).

Se você quiser armazenar em cache o PHP - você precisa usar um cache de código operacional como o APC ou o xCache.

    
por 31.10.2012 / 20:02