Nach dem Wechsel zu Cloudflare ist kürzlich ein Problem aufgetreten. Die Lösung besteht darin, Cloudflare grundsätzlich daran zu hindern, 404 Antworten zwischenzuspeichern.
In unserem Multi-Server-Setup mit Lastenausgleich treten gelegentlich 404s auf, die jedoch schnell durch rsync (über lsyncd) behoben werden. Vor Cloudflare würde eine erneute Anforderung an die 404ed-Datei sehr schnell 200 werden, wenn rsync seine Arbeit erledigt.
Da Cloudflare jedoch alle Daten basierend auf dem Caching-Header zwischenspeichert und weder Apache noch Nginx einen No-Cache-Header für 404s senden, speichert Cloudflare die 404-Antwort für eine Weile zwischen.
Ich habe nach einer Lösung gesucht, um einen solchen Header für 404s sowohl in Apache als auch in Nginx global hinzuzufügen (global für alle gehosteten Domains), bin aber bisher leer geblieben.
Kann jemand helfen?
Vielen Dank.
quelle
Antworten:
Können Sie mit der Verwendung einer error_page-Direktive nicht auskommen und dann den Speicherort mit dem hinzugefügten Header separat behandeln?
zB in Nginx:
quelle
listen
dalocation
dies im Inneren nichthttp
direkt unterstützt wird . 2. Noch wichtiger ist, dass Ihr Snippet tatsächlich nicht funktioniert, da add_header nur für 20X und 30X gilt ( nginx.org/en/docs/http/ngx_http_headers_module.html ). Wir haben jedoch Glück, da Sie ab der kürzlich veröffentlichten Version 1.7.5 jetzt einenalways
Modifikator hinzufügen können, der ihn auf alle Antwortcodes anwendet. Ich musste Nginx upgraden, aber es war ein guter Tritt in den Hintern. Es klappt.root
funktionieren. Wenn das entfernt wird, ist es ziemlich genau das, was ich für Nginx getan habe.server
Nginx- Antwort geben möchte, die global und nicht per funktioniert , kann er upvoted werden.Sie können es auch so machen:
quelle
404 "no-cache"
Nachher fehlt ein Semikolon, aber die blöde Einschränkung für die Bearbeitung von mindestens 6 Zeichen durch stackexchange hindert mich daran, es zu beheben. Offensichtlich keine gute Einschränkung für eine Site, bei der es nur um Codierung und Konfiguration geht ...In Apache 2.4 können Sie Folgendes ausprobieren:
Das
always
ist wichtig, weil dies ein:Sie sagten alle 404er, aber als vollständige Referenz könnte es natürlich sinnvoll sein, dies in ein
<FilesMatch>
oder<LocationMatch>
einzuhalten, um den Umfang einzuschränken .Ich glaube, dies ist eine neue Funktion in Apache 2.4, da die Verwendung von
expr
Bedingungen nicht in der Version 2.2 der Dokumentation zu mod_headers enthalten ist.curl -I [foo]
Test ohne diese Konfiguration:curl -I [foo]
Test mit dieser Konfiguration:Quellen:
http://httpd.apache.org/docs/current/mod/mod_headers.html
quelle
meine fünf Cent zu diesem Thema -
In unserem PHP-Projekt haben wir nur wenige 404 Seiten, daher entscheide ich mich, dies auf PHP-Ebene mit PHP-Header () -Funktionen zu tun
quelle