Wie kann man Nginx anweisen, den Cache des Backends zu berücksichtigen? uWSGI

Wie kann man Nginx anweisen, den Cache des Backends zu berücksichtigen? uWSGI

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_cachenur sicherheitshalber dupliziert, da meines Wissens nach einige Anweisungen nicht übernommen werden location. Außerdem ist es x-cache: MISSin 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.

verwandte Informationen