Nginx之11吸星大法 - (页面缓存)

简介: Nginx从入门到精通之页面缓存

什么是网页缓存?

网页缓存是存在于网页应用服务器及客户端之间的数据副本,当用户对第一次对网页资源进行访问时,经过网页服务器处理后返回客户端同事将会缓存一份数据在缓存服务器上,当下一个用户对同样的网页资源进行访问时则直接从缓存服务器总进进行相应,而不用再次对源网页服务器进行请求。有效的降低对源网页服务器的性能消耗,以及减少了网络延迟,提供了用户访问的相应速度。
image

缓存工作流程

  1. 浏览器发起请求到Nginx,Nginx根据用户的请求查找是否有本地缓存。
  2. Nginx没有找到本地缓存,则将请求转发至源站网页服务器,缓存到本地并返回请求给客户端浏览器(http status code:200)。
  3. 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

1

查看缓存命中情况

通过curl命令及浏览器查看缓存命中前后区别
image
2
3

小技巧

  1. 一般我们在对网页资源进行页面缓存时,可以按照不同的业务场景定义多种缓存区域及策略来更好的应用到我们的业务中带来更好的性能提升及用户体验。
  2. 一般proxy_temp临时缓存功能是不打开的,在高并发的业务情况下会造成性能下降。
目录
相关文章
|
6月前
|
缓存 应用服务中间件 nginx
百度搜索:蓝易云【nginx反向代理缓存教程。】
现在,nginx已经配置了反向代理缓存。它将缓存后端服务器的响应,并在下次请求时直接提供缓存的响应,减轻后端服务器的负载并提高性能。
192 1
|
缓存 前端开发 JavaScript
Vue项目打包部署Nginx配置及前端缓存问题解决
Vue项目打包部署Nginx配置及前端缓存问题解决
1224 0
Vue项目打包部署Nginx配置及前端缓存问题解决
|
2月前
|
缓存 JavaScript 前端开发
Nginx 缓存使用指南-简单
Nginx 缓存使用指南-简单
16 0
|
6月前
|
存储 缓存 Java
Nginx之Openresty缓存解读
Nginx之Openresty缓存解读
|
7月前
|
缓存 NoSQL 应用服务中间件
基于Nginx+Lua优化多级缓存架构
基于Nginx+Lua优化多级缓存架构
116 0
|
7月前
|
缓存 NoSQL 应用服务中间件
基于Redis和Nginx实现高并发缓存架构
基于Redis和Nginx实现高并发缓存架构
383 0
|
9月前
|
缓存 负载均衡 JavaScript
Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...
Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...
224 0
|
9月前
|
缓存 负载均衡 前端开发
Nginx+HAproxy+Keepaliaved缓存搭建
前端服务有大量的数据需要从后端获取,造成网络带宽的压力,同时也降低了服务性能。为了解决类似的问题, 可以在访问前端时,使用nginx缓存多次需要访问的数据
|
10月前
|
域名解析 缓存 负载均衡
记一次Nginx DNS缓存导致转发问题
记一次Nginx DNS缓存导致转发问题
11093 3
|
11月前
|
缓存 应用服务中间件 nginx
重识Nginx - 11 使用ngx_http_proxy_module的proxy_cache搭建一个具备缓存功能的反向代理服务
重识Nginx - 11 使用ngx_http_proxy_module的proxy_cache搭建一个具备缓存功能的反向代理服务
185 0