キャッシュをプロキシしたい次のURLがあります。
file.php?parameter=one¶mater2=two&r=EPOCHTIMESTAMP
クエリ文字列パラメータ「パラメータ」はリクエストによって異なります。 「paramater2」もそうです。
クエリ文字列パラメータrは、クライアントがキャッシュされた(クライアント側の)コンテンツを提供しないようにするために使用するタイムスタンプです。別名「キャッシュバスター」。はい、適切なキャッシュしないhヘッダーもすべて使用します。
ここで、これらのリクエストのいくつかをnginx経由でプロキシキャッシュしたいと思います。 r querystring paramを無視するようにnginxに指示することはできますが、エントリのキャッシュキーを設定するときに他のすべてを使用しますか? param rを無視できない場合、各キャッシュキーは一意になるため、nginxプロキシキャッシュは役に立ちません。
ありがとう。
この質問に対する解決策を見つけました。
これを行う正しい方法は、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を使用した回避策は この投稿 にあります。