proxy_cache_bypass は、URL がキャッシュ不可に変更された場合、古いキャッシュされた応答を提供し続けます。

proxy_cache_bypass は、URL がキャッシュ不可に変更された場合、古いキャッシュされた応答を提供し続けます。

通常の状況では、proxy_cache_bypassnginx を使用するとアップストリームから新しいコピーが取得され、キャッシュされた応答が新しいもので上書きされます。

しかし、URL がキャッシュ可能な応答からキャッシュ不可能な応答(たとえば、 を含む 4xx 応答Cache-Control: no-cache)に変更された場合、 を使用するとproxy_cache_bypass確かにアップストリームから新しいコピーが提供されますが、古いコピーはキャッシュ内に残ります。

つまり、 をトリガーせずに URL が要求されるたびにproxy_cache_bypass、古いキャッシュが引き続き提供されます。

これは意図された動作だと思いますproxy_cache_bypass上書きする新しい応答を保存することでキャッシュされた応答と、no-cache保存する応答がないことを意味しますか? これが起こっているのですか?

どうすれば解決できますか? 4xx 応答のキャッシュを有効にしたくないのですが...

私はnginx/1.14.2を実行しています

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my-cache:70m max_size=28g inactive=1d;
proxy_temp_path /var/cache/nginx/tmp;
proxy_cache my-cache;
proxy_cache_key $remote_user$scheme$host$request_uri;

proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504 http_429;

proxy_cache_bypass $http_cache_control;

proxy_read_timeout 90;
add_header X-Cache-Status $upstream_cache_status;

etag off;

答え1

nginxに200、301、302のレスポンスのみをキャッシュするように指示するには、次のように指定します。

proxy_cache_valid 10m;

これは、nginx に有効な応答を 10 分間キャッシュするように指示します。

答え2

これは想定された動作です。そのため、有料版を使用してプロキシキャッシュパージ指令

関連情報