web-dev-qa-db-ja.com

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

キャッシュをプロキシしたい次のURLがあります。

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

クエリ文字列パラメータ「パラメータ」はリクエストによって異なります。 「paramater2」もそうです。

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

ここで、これらのリクエストのいくつかをnginx経由でプロキシキャッシュしたいと思います。 r querystring paramを無視するようにnginxに指示することはできますが、エントリのキャッシュキーを設定するときに他のすべてを使用しますか? param rを無視できない場合、各キャッシュキーは一意になるため、nginxプロキシキャッシュは役に立ちません。

ありがとう。

4
anonymous-one

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

これを行う正しい方法は、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を使用した回避策は この投稿 にあります。

5
anonymous-one