设为首页 收藏本站
查看: 558|回复: 0

[经验分享] nginx cache命中率设计

[复制链接]

尚未签到

发表于 2016-12-23 09:37:14 | 显示全部楼层 |阅读模式
  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



  访脚本的内容为:
view sourceprint?

#!/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



  转自:http://www.361way.com/nginx-cache/2665.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-318258-1-1.html 上篇帖子: Nginx配置性能优化 下篇帖子: windows平台上的nginx使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表