J'ai récemment rencontré un problème après être passé à Cloudflare, et la solution consiste essentiellement à empêcher Cloudflare de mettre en cache les réponses 404.
Dans notre configuration multi-serveurs à charge équilibrée, des 404 occasionnels se produisent, mais ils sont rapidement corrigés par rsync (via lsyncd). Avant Cloudflare, une nouvelle demande au fichier 404ed deviendrait très rapidement 200 alors que rsync fait son travail.
Cependant, puisque Cloudflare met en cache toutes les données en fonction de l'en-tête de mise en cache, et ni apache ni nginx n'envoient un en-tête sans cache pour les 404, Cloudflare finit par mettre en cache la réponse 404 pendant un certain temps.
J'ai cherché une solution pour ajouter globalement un tel en-tête pour 404s à la fois dans apache et nginx (globalement, pour tous les domaines hébergés), mais jusqu'à présent, nous sommes vides.
Quelqu'un peut-il aider?
Je vous remercie.
la source
Réponses:
Vous ne pouvez pas vous en tirer en utilisant une directive error_page, puis gérer l'emplacement séparément avec l'en-tête ajouté?
par exemple dans Nginx:
la source
listen
car ellelocation
n'est pas prise en chargehttp
directement à l' intérieur . 2. Plus important encore, votre extrait de code ne fonctionne pas car add_header s'applique uniquement aux 20X et 30X ( nginx.org/en/docs/http/ngx_http_headers_module.html ). Cependant, nous avons de la chance, car depuis la version 1.7.5 récemment publiée, vous pouvez maintenant ajouter unalways
modificateur qui l'appliquera à tous les codes de réponse. J'ai dû mettre à niveau nginx mais c'était un bon coup de pied dans le cul. Ça marche.root
œuvres. Si cela est supprimé, c'est à peu près ce que j'ai fini par faire pour nginx.server
, il peut obtenir un vote positif.Vous pouvez aussi le faire de cette façon:
la source
404 "no-cache"
mais la stupide restriction de modification de 6 caractères minimum de stackexchange m'empêche de le corriger. Ce n'est clairement pas une bonne restriction pour un site qui seDans apache 2.4, vous pouvez essayer quelque chose comme:
Le
always
est important car il s'agit d'un:Vous avez dit tous les 404, mais pour référence complète, bien sûr, il pourrait être judicieux d'envelopper cela dans un
<FilesMatch>
ou<LocationMatch>
de limiter la portée.Je pense que c'est une nouvelle capacité dans Apache 2.4 car l'utilisation des
expr
conditions n'est pas la version 2.2 de la documentation de mod_headers.curl -I [foo]
tester sans cette config:curl -I [foo]
tester avec cette config:Sources:
http://httpd.apache.org/docs/current/mod/mod_headers.html
la source
mes cinq cents sur la question -
dans notre projet PHP, nous avons quelques 404 pages, donc je décide de le faire au niveau PHP en utilisant les fonctions PHP header ()
la source