
通常の状況では、proxy_cache_bypass
nginx を使用するとアップストリームから新しいコピーが取得され、キャッシュされた応答が新しいもので上書きされます。
しかし、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
これは想定された動作です。そのため、有料版を使用してプロキシキャッシュパージ指令