J'ai récemment rencontré un problème après la commutation sur Cloudflare et que la solution consiste à arrêter essentiellement Cloudflare de la mise en cache 404 réponses.
Dans notre configuration multi-serveurs équilibrée de la charge, des 404s occasionnels se produisent, mais ils sont rapidement fixés par RSYNC (via LSYNCD). Avant Cloudflare, une demande à nouveau au fichier 404ED deviendrait très rapidement 200 que RSYNC fait son travail.
Toutefois, étant donné que Cloudflare cache toutes les données basées sur l'en-tête de mise en cache et ni Apache ni Nginx n'envoient un en-tête NO-cache pour 404s, Cloudflare finit par mettre en cache la réponse 404 pendant un moment.
Je cherche une solution à l'échelle mondiale, ajoutez une telle en-tête pour Apache et Nginx (à l'échelle mondiale, pour tous les domaines hébergés), mais jusqu'à présent, est arrivé en blanc.
Quelqu'un peut-il aider?
Merci.
Vous ne pouvez pas obtenir avec une directive ERROR_PAGE, puis gérer l'emplacement séparément avec l'en-tête ajouté?
E.g. dans nginx :
server {
...
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
add_header Cache-Control "no-cache" always;
}
}
Vous pouvez le faire comme ça aussi:
map $status $cache_header {
default <for_other_codes>;
404 "no-cache";
}
server {
[ ... ]
add_header "Cache-Control" $cache_header always;
}
À Apache 2.4, vous pouvez essayer quelque chose comme:
FileETag None
<IfModule mod_headers.c>
Header always unset ETag "expr=%{REQUEST_STATUS} == 404"
Header always set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" "expr=%{REQUEST_STATUS} == 404"
Header always set Pragma "no-cache" "expr=%{REQUEST_STATUS} == 404"
Header always set Expires "Wed, 11 Jan 1984 05:00:00 GMT" "expr=%{REQUEST_STATUS} == 404"
</IfModule>
Le always
est important parce que c'est un:
Vous ajoutez une en-tête à une réponse non réussite (non-2xx) générée localement, telle qu'une redirection, auquel cas seul le tableau correspondant à toujours est utilisé dans la réponse ultime.
Vous avez dit tous les 404, mais pour une référence complète, bien sûr, cela pourrait être logique d'envelopper cela dans un <FilesMatch>
ou <LocationMatch>
Pour limiter la portée.
Je crois que ceci est une nouvelle capacité d'Apache 2.4 selon l'aide expr
conditionnels n'est pas la version 2.2 de la documentation mod_headers.
curl -I [foo]
Test sans cette configuration:
HTTP/1.1 404 Not Found
Date: Thu, 24 May 2018 17:44:29 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Type: text/html; charset=iso-8859-1
curl -I [foo]
Testez avec cette configuration:
HTTP/1.1 404 Not Found
Date: Thu, 24 May 2018 17:44:42 GMT
Server: Apache/2.4.18 (Ubuntu)
Cache-Control: max-age=0, no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Content-Type: text/html; charset=iso-8859-1
Sources:
mes cinq cents sur la question -
dans notre PHP, nous avons peu de 404 pages, alors je décide de le faire sur PHP niveau à l'aide PHP Header ( ) les fonctions