Nginx之11吸星大法 - (页面缓存) 1
什么是网页缓存?
网页缓存是存在于网页应用服务器及客户端之间的数据副本,当用户对第一次对网页资源进行访问时,经过网页服务器处理后返回客户端同事将会缓存一份数据在缓存服务器上,当下一个用户对同样的网页资源进行访问时则直接从缓存服务器总进进行相应,而不用再次对源网页服务器进行请求。有效的降低对源网页服务器的性能消耗,以及减少了网络延迟,提供了用户访问的相应速度。
缓存工作流程
- 浏览器发起请求到Nginx,Nginx根据用户的请求查找是否有本地缓存。
- Nginx没有找到本地缓存,则将请求转发至源站网页服务器,缓存到本地并返回请求给客户端浏览器(http status code:200)。
- Nginx找到本地缓存,首先验证缓存是否过期(Cache-Control:max-age=?),如果过期,则将请求转发至源站网页服务器,缓存到本地并返回请求给客户端浏览器(http status code:200)。如果文档没有过期,即if-modified-since与缓存的last-modified匹配,则返回缓存给浏览器(http status code:304)。
如何配置页面缓存
http {#指定缓存的时临时文件的位置proxy_temp_path /usr/local/nginx/proxy_temp_path;#指定缓存的存放目录,levels: 缓存hash目录层级,keys_zone缓存区名称及内存缓存空间大小,inactive: 未被使用的缓存过期时间,max_size: 最大磁盘缓存空间proxy_cache_path /usr/local/nginx/proxy_cache_path levels=1:2 keys_zone=zone_frist:100m inactive=1d max_size=100g;server {listen 80;server_name nginx.yekangming.com;location / {# 指定该location段缓存区名称proxy_cache zone_frist;# 指定不同的http状态码的缓存时间proxy_cache_valid 200 304 7d;proxy_cache_valid 301 302 12h;proxy_cache_valid any 1m;# 指定缓存的key为域名、uri、参数的hash值proxy_cache_key $host$uri$is_args$args;# 增加http头部关于缓存命中信息add_header Nginx-Cache "$upstream_cache_status";# 代理至源站网页服务器proxy_pass http://static.yekangming.com;}# 清除缓存的站点设置location ~ /purge(/.*) {#设置只允许指定的IP或IP段才可以清除URL缓存allow 127.0.0.1;deny all;proxy_cache_purge cache_one $host$1$is_args$args ;}# 模拟源网页服务器server {listen 80;server_name projectr.yekangming.com;location / {root /data/webroot/projct;}}
}
upstream_cache_status状态:
MISS: 未命中,请求被传送到后端
HIT: 缓存命中
EXPIRED: 缓存已经过期请求被传送到后端
UPDATING: 正在更新缓存,将使用旧的应答
STALE: 后端将得到过期的应答
缓存命中率统计
为了能够统计缓存的命中率,我们需要在日志中记录缓存命中状态
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';
# 开启日志记录功能
access_log logs/access.log main;
使用shell统计命中率
awk '{if($NF=="HIT") hit++} END {printf "%.2f%\n",hit/NR*100 }' access.log
查看缓存命中情况
通过curl命令及浏览器查看缓存命中前后区别
小技巧
- 一般我们在对网页资源进行页面缓存时,可以按照不同的业务场景定义多种缓存区域及策略来更好的应用到我们的业务中带来更好的性能提升及用户体验。
- 一般proxy_temp临时缓存功能是不打开的,在高并发的业务情况下会造成性能下降。
Nginx之11吸星大法 - (页面缓存) 1相关推荐
- nginx+redis 实现 jsp页面缓存,提升系统吞吐率
最近在开发的时候,发现之前APP客户端的一部分页面用的是webview交互,这些页面请求很多,打开一套试卷,将会产生100+的请求量,导致系统性能下降.于是考虑在最靠近客户端的Nginx服务器上做Re ...
- Nginx设置expires设定页面缓存时间
2019独角兽企业重金招聘Python工程师标准>>> 配置expires expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求 要配置expire ...
- Nginx特性验证-反向代理/负载均衡/页面缓存/URL重定向
原文发表于cu:2016-08-25 参考文档: Nginx 反向代理.负载均衡.页面缓存.URL重写等:http://freeloda.blog.51cto.com/2033581/1288553 ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解(1)
大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写、读写分离及简单双机热备详解...
大纲 一.前言 二.环境准备 三.安装与配置Nginx (windows下nginx安装.配置与使用) 四.Nginx之反向代理 五.Nginx之负载均衡 (负载均衡算法:nginx负载算法 up ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
标签:读写分离 页面缓存 URL重写 Nginx 反向代理 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeloda.bl ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解【转载】
本文只为备份,以防失效.原文请看https://blog.51cto.com/freeloda/1288553 补充说明:部分图片为测试图片,未完全复制,参考文字描述即可. Nginx 反向代理.负载 ...
- Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解
大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...
- Nginx读取Memcached实现页面内容缓存
2019独角兽企业重金招聘Python工程师标准>>> 应用场景:将页面的html代码内容缓存到Memcached中,通过Nginx直接连接并读取Memcached中的内容,来实现页 ...
- 使用Nginx+Memcache做页面缓存
前言 官方商城改版之后,为了提升动态页面的访问速度,对商城的一些页面进行了缓存,使其在一定时间之内避免了重复的查询和编译. 原理 主要使用了 nginx 的 memcached_module 模块,直 ...
最新文章
- [bzoj4131]并行博弈_博弈论
- DUILib 中的通知事件
- cocos2d-x编程之CCScale9Sprite典型用法
- P1848 [USACO12OPEN]Bookshelf G(线段树优化 DP)
- Simple-Faster-RCNN源码学习笔记
- Spring Boot Framework的关键组件和内部构造(自动装配、起步依赖、CLI、Actuator)
- C语言函数声明与定义(待删除)
- 曾断崖式跌落的三星,能否在中国东山再起?
- §3—1 复式记账法 [第三章 复式记账 ]
- webpack使用七
- Java项目开发管理工具-Maven基础
- 通过企业微信服务端API接口进行群发应用消息
- robots.txt详解
- 六、配置基于 IP 子网划分 VLAN 示例
- 巨额商誉,谁来买单?
- BootstrapTable 表格 checkbox 和 显示行号
- word字体号对应的磅数
- 微信公众号开发之授权
- guava LoadingCache 的用法
- 一网打尽Mac上的高效工具 - 效率工作篇(附演示视频)
热门文章
- SqlZoo.net习题答案:Using the SELECT statement.【nobel】
- android launcher3 home页简易分析
- 【原创】编程题练习:头插法尾插法建立单链表及找寻单链表中的倒数第K个节点...
- 网络七层,五层,四层模型,数据封装、解封装,进制转换。
- Netcore 及SDK版本号问题
- Linux服务器管理神器-IPython
- 连接虚机中的mysql服务
- WinForm sender初级应用
- 物理运动网站收藏 ╮(╯▽╰)╭
- SQL中一种类似GUID值的函数实现