Recentemente, encontrei um problema depois de mudar para o Cloudflare, e a solução é basicamente impedir o Cloudflare de armazenar em cache as respostas 404.
Em nossa configuração de vários servidores com balanceamento de carga, ocorrem 404 ocasionais, mas são rapidamente corrigidos pelo rsync (via lsyncd). Antes do Cloudflare, uma solicitação novamente para o arquivo 404ed se tornaria muito rapidamente 200 quando o rsync fizer seu trabalho.
No entanto, como o Cloudflare armazena em cache todos os dados com base no cabeçalho de cache e nem o apache nem o nginx enviam um cabeçalho sem cache para 404s, o Cloudflare acaba armazenando em cache a resposta 404 por um tempo.
Estive procurando uma solução para adicionar globalmente esse cabeçalho para 404s no apache e no nginx (globalmente, para todos os domínios hospedados), mas até agora ficaram em branco.
Alguém pode ajudar?
Obrigado.
fonte
Respostas:
Você não consegue usar uma diretiva error_page e, em seguida, manipula o local separadamente com o cabeçalho adicionado?
por exemplo, no Nginx:
fonte
listen
vez quelocation
não é suportadahttp
diretamente por dentro . 2. Mais importante, seu snippet realmente não funciona porque add_header se aplica apenas a 20X e 30X ( nginx.org/en/docs/http/ngx_http_headers_module.html ). No entanto, estamos com sorte, já que a partir do 1.7.5 lançado recentemente, agora você pode adicionar umalways
modificador que o aplicará a todos os códigos de resposta. Eu tive que atualizar o nginx, mas foi um bom chute na bunda. Funciona.root
funciona. Se isso for removido, é praticamente o que acabei fazendo pelo nginx.server
ela, poderá ser votada.Você também pode fazer o seguinte:
fonte
404 "no-cache"
mas a estúpida restrição de edição de 6 caracteres da stackexchange me impede de corrigi-la. Claramente, não é uma boa restrição para um site que tem tudo a ver com codificação e configurações ...No apache 2.4, você pode tentar algo como:
O
always
é importante porque este é um:Você disse todos os 404s, mas para uma referência completa, é claro, pode fazer sentido colocar isso em um
<FilesMatch>
ou<LocationMatch>
limitar o escopo.Eu acredito que este é um novo recurso no apache 2.4, pois o uso de
expr
condicionais não é o da versão 2.2 da documentação do mod_headers.curl -I [foo]
teste sem esta configuração:curl -I [foo]
teste com esta configuração:Fontes:
http://httpd.apache.org/docs/current/mod/mod_headers.html
fonte
meus cinco centavos na questão -
em nosso projeto PHP, temos poucas páginas 404, então eu decido fazê-lo no nível PHP usando as funções header () do PHP
fonte