nginx 代理缓存不起作用

nginx 代理缓存不起作用

我正在代理外部 JSON API,并尝试缓存代理响应。为了确定代理缓存是否正常工作,我添加了

add_header X-Cached $upstream_cache_status;

并始终看到其MISS价值。

我的 nginx 配置位置:

location /api/tides {
  proxy_hide_header Cache-Control;
  proxy_ignore_headers Cache-Control;
  proxy_cache worldtidecache;
  proxy_set_header Host www.worldtides.info;
  proxy_pass https://example.com/api/$query_string;
  add_header X-Cached $upstream_cache_status;
}

在此之前我已经proxy_cache_path设定

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=worldtidecache:100m max_size=1g inactive=48h use_temp_path=off;

www-data具有读/写访问权限/var/cache/nginx

我假设proxy_buffering已将其设置为,on因为我没有对此进行任何明确的设置。

nginx 配置有效。我已经用以下方法测试过nginx -c nginx.conf -t

╰─sudo nginx -c nginx.conf -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

我已经跟踪了和error.logaccess.log但没有发现任何迹象表明缓存为何无法正常工作。

我从代理响应中获得的标头:

Server: nginx/1.11.13
Date: Sun, 20 Aug 2017 14:01:59 GMT
Content-Type: text/json; charset=utf-8
Content-Length: 2976
Connection: keep-alive
Content-Encoding: gzip
X-Cloud-Trace-Context: 38faabaa5ada170536632bb55a0ddf00;o=1
Vary: Accept-Encoding
X-Cached: MISS

我被困在了这一点上。我不知道还有什么原因导致 nginx 无法缓存。请求中没有发生任何缓存破坏,例如唯一的查询参数,每个请求的 URL 都是一致的。除了将标头设置为缓存尝试结果之外,我不知道还有其他方法可以记录代理缓存正在做什么。

答案1

Twitter 来救援:https://twitter.com/btucker/status/899309118137057286

proxy_cache_valid any 48h;

答案2

因为@bcardarella 的解决方案对我来说不起作用,所以采用第二种解决方案

添加proxy_buffering on;到您的位置块

来源:https://github.com/nginx-proxy/nginx-proxy/issues/800#issuecomment-383901151

相关内容