Nginx proxy_cache_bypass 提供不一致的缓存

Nginx proxy_cache_bypass 提供不一致的缓存

我有一个带有反向代理的 nodeJS 应用程序。

这是我想要的设置

  1. Nginx 始终维护一个缓存副本(事实来源)

  2. 客户端应始终重新验证。

  3. 我的应用程序将能够使用Cache-Purge: true标头清除缓存

我所提供数据的 Cache-Control 是

s-maxage=86400 必须重新验证

我的 nginx 位置块设置如下

location / {

    # Start Cache Settings
    # https://www.nginx.com/blog/nginx-caching-guide/

    proxy_cache_key $request_uri;
    proxy_cache my_cache;
    proxy_cache_revalidate on;
    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
    proxy_cache_background_update on;
    proxy_cache_lock on;
    add_header X-Cache-Status $upstream_cache_status;
    proxy_cache_bypass $http_cache_purge;
    
    
    # End Cache Settings
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $http_host;
    proxy_pass: $upstream
}

我的信息被缓存了,但是,当我发出 curl 来清除缓存时

curl http://example.com/abc -H 'Cache-Purge: true' -I

缓存键已被清除,我可以在发出以下命令时看到新数据

curl http://example.com/abc

然而(问题……)

当我的前端应用程序(使用 javascript fetch() 发送 GET 请求)时,它仍然返回旧的缓存(我也尝试设置 Cache-Control:no-cache)。

curl请求正在提供新的缓存时(清除后)。

当我到达我的 nginx 缓存文件夹时,我看到了 2 个不同的缓存副本,一个用于我的 curl 请求,一个用于我的 javascript 请求。

如果我直接在浏览器中请求 API,它也会提供新鲜内容(curl 请求)。

如何才能实现一致的缓存结果?

编辑:nginx 可以根据我的原始标头进行缓存,我该如何忽略它?

相关内容