添加语句

对于 nginx 的缓存是否命中,可以看得到吗?其实也是可以的。

可以通过在 nginx 的配置文件里面增加一个add_header 参数就可以。
关于add_header这个指令的说明,可以看ngx_http_headers_module模块的说明找到。

Syntax: add_header name value [always];
Default: —
Context: http, server, location, if in location

在官方的说明中add_header可以在http, server, location, if in location中出现。
那么想要查看nginx 的缓存状态,就可以所需要的块中添加:

add_header X-Cache-Status $upstream_cache_status;

此示例在响应客户端时添加X-Cache-Status HTTP标头。

$upstream_cache_status的可能值:

  • miss:在缓存中找不到响应,因此从原始服务器获取。然后可以缓存响应。
  • bypass:响应是从原始服务器获取的,而不是从缓存中提供的,因为请求与proxy_cache_bypass指令匹配。
  • expired:缓存中的条目已过期。响应包含来自源服务器的新内容。
  • stale:失效缓存,内容过时,因为原始服务器未正确响应,并且已配置proxy_cache_use_stale。
  • updating:内容过时,因为当前正在更新条目以响应先前的请求,并且配置了proxy_cache_use_stale更新。
  • revalidated:启用了proxy_cache_revalidate指令,NGINX验证当前缓存的内容仍然有效(If-Modified-Since或If-None-Match)。
  • hit:响应包含直接来自缓存的有效新鲜内容。
  • scarce:未达缓存要求的请求。

如何监控?

可以通过prometheus 结合 nginx 的 nginx-module-vts 插件可以获取到数据。效果截图如下:
nginx_server_cache