proxy_cache
のリバースプロキシとしてnginxを使用しています。バックエンドはcache-control
応答ヘッダーを設定しており、可能な場合はnginxがキャッシュから応答を提供します。
ただし、リクエストヘッダーCache-Control:max-age=0
を設定して、クライアントがキャッシュをバイパスできるようにしたいと思います。このようにして、ユーザーはブラウザでCTRL+R
を押すことで新しいコピーを取得できます。デフォルトでは、nginxはCache-Control
リクエストヘッダーを無視しているようです。
クライアントがCache-Control:max-age=0
でリソースを要求するたびに、バックエンドから新しいコピーをフェッチしてキャッシュを更新するようにnginxを構成するにはどうすればよいですか?
proxy_cache_bypass
を使用できます。
proxy_cache_bypass $http_cache_control;
これにより、nginxは、クライアントからのHTTPリクエストにCache-Control
ヘッダーが存在する場合に、ドキュメントの新しいコピーをフェッチします。
バックエンドからの結果の応答は、引き続きキャッシュの対象となることに注意してください。キャッシュされないようにする場合は、 proxy_no_cache
ディレクティブでも同じ引数を使用します。
ソース: http://wiki.nginx.org/HttpProxyModule#proxy_cache_bypass
クライアントのヘッダーにCache-Control: max-age=0
が含まれている場合にのみキャッシュをバイパスしたい場合(たとえば、別のバリアントCache-Control: no-cache
を明示的にサポートしない場合、これは実際にはページの新しいコピーをより強く優先すると思われます) max-age=0
is)よりも、次のものを使用できますが、このような制限があるためお勧めしません。
set $cc_ma 0;
if ($http_cache_control = "max-age=0") { # honour ⌘R, ignore ⇧⌘R (yes, bad idea!)
set $cc_ma 1;
}
proxy_cache_bypass $cc_ma;
ところで、Pragma: no-cache
もありますが、これは明らかに説明されていませんが、私の限られた一連の実験では、常にCache-Control: no-cache
が付随しているため、元のワンライナーがおそらく最善を尽くしますジョブ。
注意として、リロードまたはをクリックすると、SeaMonkeyはCache-Control: max-age=0
を送信します ⌘R、およびPragma: no-cache\r\nCache-Control: no-cache
Shiftリロードまたは ⇧⌘R。