NGINX プロキシ キャッシュ - クエリ文字列内のキャッシュ バスター変数 - 無視できますか?

NGINX プロキシ キャッシュ - クエリ文字列内のキャッシュ バスター変数 - 無視できますか?

プロキシ キャッシュしたい URL は次のとおりです。

file.php?parameter=one&paramater2=two&r=EPOCHTIMESTAMP

クエリ文字列パラメータ「parameter」はリクエストごとに異なります。「paramater2」も同様です。

クエリ文字列パラメータ r は、クライアントが (クライアント側で) キャッシュされたコンテンツを提供しないようにするために使用するタイムスタンプです。別名「キャッシュ バスター」。はい、適切なキャッシュしない h ヘッダーもすべて使用します。

ここで、これらのリクエストの一部を nginx 経由でプロキシ キャッシュしたいと考えています。エントリのキャッシュ キーを設定するときに、r クエリ文字列パラメータを無視し、他のすべてを使用するように nginx に指示することは可能ですか? パラメータ r を無視できない場合、各キャッシュ キーが一意になるため、nginx プロキシ キャッシュは役に立たなくなります。

ありがとう。

答え1

この質問に対する解決策を見つけました。

これを行う正しい方法は、nginx$arg_...変数を使用してキャッシュ キーを作成することです。$arg_...にはクエリ文字列パラメータが含まれます。したがって、上記の例では、キャッシュ キー内で$arg_parameterと を使用します。$arg_parameter2

結果は次nginx.confのようになります。

http {
  ...
    server {
      location / {
         ...
         proxy_cache_key $scheme$proxy_host$uri$is_args$arg_parameter$arg_parameter2;
      }
    }
  ...
}

パラメータなどのハイフン(ダッシュ)を含むクエリ文字列パラメータは、data-*構文では機能しないことに注意してください$arg_paramName。Luaを使用した回避策は、この郵便受け

関連情報