首页 > 系统相关 >nginx cache命中率设计

nginx cache命中率设计

时间:2023-06-11 19:02:52浏览次数:64  
标签:status hit 命中率 cache nginx proxy upstream


nginx提供了$upstream_cache_status这个变量来显示缓存的状态,我们可以在配置中添加一个http头来显示这一状态,达到类似squid的效果。

location  / {
       proxy_redirect          off;
       proxy_set_header        Host            $host;
       proxy_set_header        X-Real-IP       $remote_addr;
       proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_connect_timeout   180;
       proxy_send_timeout      180;
       proxy_read_timeout      180;
       proxy_buffer_size       128k;
       proxy_buffers           4 128k;
       proxy_busy_buffers_size 128k;
       proxy_temp_file_write_size 128k;
       proxy_cache cache;
       proxy_cache_valid 200 304 1h;
       proxy_cache_valid 404 1m;
       proxy_cache_key $uri$is_args$args;
       add_header  Nginx-Cache "$upstream_cache_status";
       proxy_pass http://backend;
   }


而通过curl或浏览器查看到的header如下:


HTTP/1.1 200 OK
Date: Mon, 22 Apr 2013 02:10:02 GMT
Server: nginx
Content-Type: image/jpeg
Content-Length: 23560
Last-Modified: Thu, 18 Apr 2013 11:05:43 GMT
Nginx-Cache: HIT
Accept-Ranges: bytes
Vary: User-Agent


$upstream_cache_status包含以下几种状态:

·MISS 未命中,请求被传送到后端
·HIT 缓存命中
·EXPIRED 缓存已经过期请求被传送到后端
·UPDATING 正在更新缓存,将使用旧的应答
·STALE 后端将得到过期的应答

二、nginx cache命中率统计

即然nginx为我们提供了$upstream_cache_status函数,自然可以将命中状态写入到日志中。具体可以如下定义日志格式:


log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"'
                  '"$upstream_cache_status"';

命中率统计方法:用HIT的数量除以日志总量得出缓存命中率:


awk '{if($NF==""HIT"") hit++} END {printf "%.2f%",hit/NR}' access.log



了解了原理以后,也可以通过crontab脚本将每天的命中率统计到一个日志中,以备查看。


# crontab -l
1 0 * * * /opt/shell/nginx_cache_hit >> /usr/local/nginx/logs/hit

访脚本的内容为:


#!/bin/bash
LOG_FILE='/usr/local/nginx/logs/access.log.1'
LAST_DAY=$(date +%F -d "-1 day")
awk '{if($NF==""HIT"") hit++} END {printf "'$LAST_DAY': %d %d %.2f%n", hit,NR,hit/NR}' $LOG_FILE

标签:status,hit,命中率,cache,nginx,proxy,upstream
From: https://blog.51cto.com/u_6186189/6458566

相关文章

  • Nginx+Jwplayer播放流媒体视频
    Nginx+Jwplayer播放流媒体视频JWPlayerisoneofthemostpopularvideoplayersontheInternet.Itisusedbymostmodern“tube”websitesforvideohosting,publishingandadvertising.ItcanbeusedasstandaloneinyourHTMLandFlashcode,orintegratedin......
  • nginx流量带宽等请求状态统计( ngx_req_status)
    介绍ngx_req_status用来展示nginx请求状态信息,类似于apache的status,nginx自带的模块只能显示连接数等等信息,我们并不能知道到底有哪些请求、以及各url域名所消耗的带宽是多少。ngx_req_status提供了这些功能.功能特性按域名、url、ip等等统计信息统计总流量统计当前带宽\峰值带宽统......
  • 通过ngx-lua来统计nginx上的虚拟主机性能数据
    介绍以前我们为nginx做统计,都是通过对日志的分析来完成.比较麻烦,现在基于ngx_lua插件,开发了实时统计站点状态的脚本,解放生产力.项目主页:https://github.com/skyeydemon/ngx-lua-stats功能支持分不同虚拟主机统计,同一个虚拟主机下可以分不同的location统计.可以统计与query-......
  • nginx+tomcat+memcached (msm)实现 session同步复制
    这里重点强调如何实现linux服务器上服务器session共享,软件安装不再赘述。 首先我们需要对cookie和session的工作机制非常了解,如果不了解其中的原理,就算配置成功,也毫无意义。换了工作换了环境,重新配置起来 仍然需要重头来过,事倍功半。    cookie是怎样工作的? 例如,我们创......
  • Nginx流量复制/AB测试/协程
    在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线。这其实就需要进行流量复制,把流量复制到其他服务器上,一种方式是使用如tcpcopy引流;另外我们还可以使......
  • nginx-gridfs Benchmarking Raw Results
    RawDataSpreadsheetwithtestresults(ODFformat)Thesefollowinglinksshowtherawoutputfromthebenchmarkingutilities.GridFSOverNetworkThistestscenarioshowsperformanceforHTTPrequestsoveragigabitEthernetLANconnection.MongoDBand......
  • nginx-ssl
    阿里云sslhttps://cloud.tencent.com/developer/article/1444888?from=15425&areaSource=102001.1&traceId=hr6wuqWG00xJ9twXuLoOAapkaddopenssl-devopensslmkdir/usr/local/nginx/conf/sslcd/usr/local/nginx/conf/sslopensslgenrsa-outmy.key-des31024......
  • k8s 1.26.5 Ingress-nginx 的高可用部署
    1.安装部署ingress-nginx本次部署使用了高可用的形式,会在每个node节点做亲和性(master不部署),让每一个pod都部署上去,然后加入NGINX去过负载,这样我们之后用NGINX的80端口访问域名就可以了。主机地址端口k8s-node01192.168.80.48nginx启动端口:3080,负载均衡端口:根据ingre......
  • Nginx用作反向代理服务器使用!
        Nginx("enginex")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx是由IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发的,它已经在该站点运行超过三年了。Igor将源代码以类BSD许可证的形式发布。Nginx超越Apache的高性......
  • 计算机体系架构——Cache
    本文主要内容如下,基本涉及了cache的概念,工作原理,以及保持一致性的入门内容。1为什么需要Cache1.1为什么需要Cache我们首先从一张图来开始讲为什么需要cache. 上图是CPU性能和Memory存储器访问性能的发展。我们可以看到,随着工艺和设计的演进,CPU计算性能其实发生了翻天覆地......