Da ist einähnliche Frageaber die Lösung dort funktioniert für mich nicht.
Wir haben nginx und uWSGI als Backend. Wir brauchen nginx, um die Backend-Antwort entsprechend dem Inhalt des Antwortheaders zwischenzuspeichern.
Ich führe beispielsweise aus curl -I https://example.com/api/project_data/
. Wenn ich verwende tcpdump
, sehe ich, dass das Backend antwortet:
HTTP/1.1 200 OK
Content-Type: application/json
Vary: Accept, Accept-Language, Origin
Allow: GET, HEAD, OPTIONS
Cache-Control: public, max-age=3600
X-Request-ID: 6aa...0d99
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Set-Cookie: longterm_session=45c6...67; Domain=example.com;
Die Antwort wird jedoch nicht zwischengespeichert und Nginx greift bei jedem Empfang der Anforderung auf das Backend zurück.
Die Nginx-Konfiguration:
http {
uwsgi_cache_path /var/local/nginx_cache levels=2:2 use_temp_path=off inactive=1h keys_zone=mycache:20m ;
....
server {
....
uwsgi_cache mycache;
uwsgi_cache_key "$request_method$request_uri";
location /api/project_data/ {
add_header X-Cache $upstream_cache_status;
add_header Pragma "public";
uwsgi_pass 127.0.0.1:49002;
include uwsgi_params;
uwsgi_cache mycache;
uwsgi_cache_key "$request_method$request_uri";
}
Ich habe es uwsgi_cache
nur sicherheitshalber dupliziert, da meines Wissens nach einige Anweisungen nicht übernommen werden location
. Außerdem ist es x-cache: MISS
in der Antwort enthalten, die Nginx an den Client sendet.
Was mache ich falsch?
Antwort1
Nginx-Dokumenteausdrücklich erklärenDas
Wenn der Header das Feld „Set-Cookie“ enthält, wird eine solche Antwort nicht zwischengespeichert.
Sie müssten Ihre Anwendung so einrichten, dass sie keine Cookies sendet, damit die entsprechende Antwort zwischengespeichert wird. Dies hat offensichtliche Gründe: Cookies sind zusätzliche Daten für Client und Server, genau wie beispielsweise der Antworttext.