Descobri que com o Wordpress (alguns temas) e outros aplicativos PHP às vezes é quase impossível obter os cabeçalhos configurados corretamente usando o PHP. Minha solução é que eu simplesmente ignoro os cabeçalhos que o aplicativo define e os substituo pelo que desejo no Nginx. Acho isso muito mais simples, muito mais rápido e muito mais confiável.
Se você puder descobrir como fazer isso a partir do seu aplicativo e do PHP, ótimo, mas dessa forma você tem muito controle e é fácil. Construir o nginx com o módulo requerido é mais fácil do que você imagina, isso provavelmente pode ser feito em 30 minutos, com base em um guia que eu ligo abaixo.
Eu tenho um guia sobre como configurar o Nginx e o Cloudflare.
Versão resumida do cabeçalho de armazenamento em cache:
- Você quer o controle de cache
- Você não quer pragma
Para imagens, use algo assim em sua localização - você precisa de um módulo headers-more compilado no nginx. Veja a parte 1 do meu tutorial para isso.
add_header Cache-Control "public, max-age=691200, s-maxage=691200";
more_clear_headers Server; more_clear_headers "Pragma"; more_clear_headers "Expires";
Para páginas eu não coloco em cache no CloudFlare, mas eu uso cache de páginas nginx fast_cgi, que está no meu tutorial.
Para CloudFlare, você pode precisar usar regras de páginas se precisar de algo complicado, mas, em geral, as configurações padrão armazenam as imagens em cache, mas não as páginas.