web-dev-qa-db-ja.com

nginxリバースプロキシはキャッシュを無効にします

aPIに接続するためのリバースプロキシとしてnginxを使用します。問題は、何かを追加または削除した後にクエリを送信するときです。 Nginxは古いjson値を送ってくれます。キャッシュを無効にしようとしましたが、機能しません。

私のnginx設定:

location  / {

  sendfile off;
  add_header Last-Modified $date_gmt;
  add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
  if_modified_since off;
  expires off;
  etag off;
  proxy_no_cache 1;
  proxy_cache_bypass 1;

  proxy_pass http://127.0.0.1:5000;
  proxy_set_header Host $http_Host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header HTTPS   $https;
}

私はnginxなしでクエリを試しましたが、すべてコンソールでうまく機能します

ありがとうございました!

3
Kévin Gaulin

ドキュメントによると proxy_cache 置き換える必要があります

proxy_no_cache 1;
proxy_cache_bypass 1;

proxy_no_cacheおよびproxy_cache_bypassは、応答が保存されない条件を定義しますキャッシュ。

次に、キャッシュを無効にするために、これら2つの条件を次のように置き換えることができます。

proxy_cacheオフ;

ここでは、ステートレスAPIサーバーのプロキシを構成するために使用できる完全な例を示します

location /myapi {

        # Proxy 
        proxy_set_header                X-Localhost true;
        proxy_set_header                X-Real-IP $remote_addr;
        proxy_set_header                X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass                      http://localhost:8080/myapi;

        proxy_redirect                  off;
        proxy_buffers                   32 16k;
        proxy_busy_buffers_size         64k;
        proxy_cache                     off;


        # Headers for client browser NOCACHE + CORS Origin filter 
        add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
        expires off;
        add_header    'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
        add_header    'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept' always;

        allow all;
    }
3
bdzzaid