我有一个带有反向代理的 nodeJS 应用程序。
这是我想要的设置
Nginx 始终维护一个缓存副本(事实来源)
客户端应始终重新验证。
我的应用程序将能够使用
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 可以根据我的原始标头进行缓存,我该如何忽略它?