14、Nginx---缓存服务

这篇具有很好参考价值的文章主要介绍了14、Nginx---缓存服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、缓存类型

1、服务器端缓存
nginx 缓存,nginx,nginx,缓存
2、代理缓存
nginx 缓存,nginx,nginx,缓存
3、客户端缓存
nginx 缓存,nginx,nginx,缓存
代理缓存的原理:
nginx 缓存,nginx,nginx,缓存

二、代理缓存配置语法

2.1、代理缓存路径

proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size]
[manager_files=number] [manager_sleep=time] [manager_threshold=time]
[loader_files=number]  [loader_sleep=time]  [loader_threshold=time]
[purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
默认:-
配置块:http
解释:
  • path      缓存文件路径
  • levels    设置缓存文件目录层次;levels=1:2 表示两级目录
  • keys_zone 设置缓存名字和共享内存大小
  • inactive  在指定时间内没人访问则被删除
  • max_size  最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源。

2.2、配置代理缓存

proxy_cache zone|off;  # 是否开启缓存,是的话zone填写keys_zone后的name值,不开启off
默认:proxy_cache off;
配置块:http、server、location

2.3、缓存过期时间

proxy_cache_valid [code ...] time;  # 缓存过期周期,code表示状态码
默认:-
配置块:http、server、location
例如配置 proxy_cache_valid 200 12h 意思是状态码为 200 的 缓存 12个小时。

2.4、缓存的维度

proxy_cache_key string; # 缓存的维度
默认:proxy_cache_key  $scheme $proxy_host $request_uri; http协议 + 主机名 + uri 把这三个作为一个单独的key来缓存。
配置块:http、server、location
 

三、示例

/etc/nginx/conf.d/cache.conf:
upstream imooc {
    server 192.168.11.135:8001;
    server 192.168.11.135:8002;
    server 192.168.11.135:8003;
}

proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=imooc_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        proxy_cache imooc_cache;
        proxy_pass http://imooc;
        proxy_cache_valid 200 304 12h;
        proxy_cache_valid any 10m;
        proxy_cache_key $host$uri$is_args$args;
        add_header Nginx-Cache "$upstream_cache_status";
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    }
}
​
  • proxy_cache_path /etc/nginx/cache: 存放缓存文件的目录
  • levels=1:2: 目录分级,按照两层目录的方式来进行分级。
  • keys_zone=imooc_cache:10m: zone空间的名字,后面配置 proxy_cache 后面配的就是这个名字。10m表示开辟key空间的大小, 一般1m大概能存放8000个key
  • max_size=10g: 表示缓存目录最大是多大,不能让缓存无限增长占满整个磁盘。当缓存空间满了后,Nginx就会触发淘汰规则,把不常访问的就会淘汰掉。
  • inactive=60m: 这个60m是时间单位,表示60分钟, 表示如果在60分钟内如果某个缓存没有被访问过,就会把它清理掉
  • use_temp_path=off:这个是用来存放临时文件的, 建议关闭,如果打开的话,Nginx会另外建立一个目录和cache目录两个目录在更新缓存时容易出现一些性能方面的损耗。
  • proxy_cache imooc_cache : 表示我们已经 开启了代理缓存 ,该值是proxy_cache_path中的 keys_zone 的值,如果不想使用代理缓存,将该值配置成 off。
  • proxy_pass http://imooc: 代理的地址
  • proxy_cache_valid 200 304 12h;: 状态码为200,304的响应过期时间为 12h。
  • proxy_cache_valid any 10m;: 除了200和304状态码的其它状态码的缓存时间为10分钟。
  • proxy_cache_key $host$uri$is_args$args;: 设置默认缓存的key。
        $is_args表示请求中的URL是否带参数,如果带参数,$is_args值为"?"。如果不带参数,则是空字符串。
        $args表示HTTP请求中的参数。
  • add_header Nginx-Cache "$upstream_cache_status";: 增加一个http响应头信息,Nginx-Cache, 告诉客户端是否已经命中代理缓存
  • proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;: 当我们的后端其中一台服务器出现错误,超时,或者500,502,503,504等不正常的头返回时,就跳过这一台,去访问下一台。避免因为单台服务器的异常对前端产生影响。
三台服务器的配置:
第一台:
/etc/nginx/conf.d/server1.conf
server {
    listen       8001;
    server_name 127.0.0.1;
    location / {
        root /home/testzq/app/code1;
        index index.html;
    }
}
/home/testzq/app/code1/index.html
<html>
<head>
    <meta charset="utf-8">
    <title> server 1</title>
</head>
<body>
    <h1>server 1</h1>
</body>
</html>
第二台:
/etc/nginx/conf.d/server2.conf
server {
    listen       8002;
    server_name 127.0.0.1;
    location / {
        root /home/testzq/app/code2;
        index index.html;
    }
}
/home/testzq/app/code2/index.html
<html>
<head>
    <meta charset="utf-8">
    <title> server 2</title>
</head>
<body>
    <h1>server 2</h1>
</body>
</html>
第三台:
/etc/nginx/conf.d/server3.conf
server {
    listen       8003;
    server_name 127.0.0.1;
    location / {
        root /home/testzq/app/code3;
        index index.html;
    }
}
/home/testzq/app/code3/index.html
<html>
<head>
    <meta charset="utf-8">
    <title> server 3</title>
</head>
<body>
    <h1>server 3</h1>
</body>
</html>
重启nginx:
nginx -t -c /etc/nginx/nginx.conf            # 测试配置文件语法
nginx -s reload -c /etc/nginx/nginx.conf     # 重新加载配置项
>>>先在代理服务器中将缓存关闭 (proxy_cache off),刷新页面,发现页面可以在三个站点间轮询显示:
nginx 缓存,nginx,nginx,缓存
nginx 缓存,nginx,nginx,缓存
nginx 缓存,nginx,nginx,缓存
  
>>>然后在把代理缓存打开,发现页面不在轮询了,请求头多了缓存头(这头是我们配置的):
nginx 缓存,nginx,nginx,缓存
同时也会在我们配置的缓存目录( /etc/nginx/cache)生成缓存目录:
nginx 缓存,nginx,nginx,缓存
缓存的内容如下:
nginx 缓存,nginx,nginx,缓存

四、清理指定缓存

如何清理指定缓存?
法1:rm -rf 缓存目录内容
法2:第三方扩展模块nginx_cache_purge
nginx 缓存,nginx,nginx,缓存
  
如何让部分页面不缓存:
proxy_no_cache string ...;
默认:-
配置块:http、server、location
比如:这里配置的意思就是当url中匹配到了 index.html , login, register, password 和 reset 时,不缓存该url所对应的页面
nginx 缓存,nginx,nginx,缓存

五、缓存命中分析

方式1:
通过设置 response 的头信息 Nginx-Cache:
add_header Nginx-Cache "$upstream_cache_status";
没缓存时,Nginx-Cache:Miss,有缓存时如下:
nginx 缓存,nginx,nginx,缓存
 
方式2:
通过设置 log_format,打印日志进行分析。(打印 $upstream_cache_status 这个Nginx默认的变量)
$upstream_cache_status 这个变量有以下几种值
nginx 缓存,nginx,nginx,缓存
缓存命中率 = HIT次数 / 总请求次数
  
1、首先在 /etc/nginx/nginx.conf 中的 log_format 中加入 $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"';
2、然后配置缓存代理的 access_log 的路径
nginx 缓存,nginx,nginx,缓存
3、然后使用linux 的awk 命分析日志
awk '{if($NF=="\"HIT\""){hit++}}END{printf "%.2f", hit/NR}' /var/log/nginx/proxy_cache_access.log

命令解释:文章来源地址https://www.toymoban.com/news/detail-768371.html

  • $NF :  日志每行的最后一个参数。
  • hit:我们自定义的一个变量,用来记录被命中的次数。
  • NR:AWK的内置变量,表示本次分析所扫描日志的总行数。
命令执行结果:
nginx 缓存,nginx,nginx,缓存

到了这里,关于14、Nginx---缓存服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微服务---分布式多级缓存集群实现方案(Caffeine+redis+nginx本地缓存+Canal数据同步)

    传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: •请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 •Redis缓存失效时,会对数据库产生冲击 多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻T

    2024年02月12日
    浏览(37)
  • 分布式 - 服务器Nginx:一小时入门系列之代理缓冲与缓存

    官方文档:https://nginx.org/en/docs/http/ngx_http_proxy_module.html 代理缓冲用于临时存储从后端服务器返回的响应数据。通过使用代理缓冲,Nginx可以在接收完整的响应后再将其发送给客户端,从而提高性能和效率。 ① 客户端往往是用户网络,情况复杂,可能出现网络不稳定,速度较

    2024年02月11日
    浏览(47)
  • nginx 配置浏览器不缓存文件 每次都会从服务器 请求新的文件

    适用于实时更新数据的,网页 可以让用户每次都是重新请求,新的index.html 防止过期文件,影响用户体验 有时候更新了js 文件 ,但是用户的浏览器则不会立即更新js文件的缓存 从而造成用户体验不佳 优点,每次都能打开最新的页面 缺点 ,会增加服务器负荷 要在 Nginx 中禁用

    2024年04月08日
    浏览(50)
  • Nginx(6)nginx的缓存集成

    缓存就是数据交换的缓冲区(称作Cache),当用户要获取数据的时候,会先从缓存中去查询获取数据,如果缓存中有就会直接返回给用户,如果缓存中没有,则会发请求从服务器重新查询数据,将数据返回给用户的同时将数据放入缓存,下次用户就会直接从缓存中获取数据。 缓

    2024年02月12日
    浏览(39)
  • nginx浏览器缓存和上流缓存expires指令_nginx配置HTTPS

    1.nginx控制浏览器缓存是针对于静态资源[js,css,图片等] 1.1 expires指令

    2024年02月08日
    浏览(43)
  • Nginx缓存&优雅清除缓存

    前面我们知道Nginx可以对浏览器缓存进行配置,让一些静态资源缓存到用户本地存储,以提高页面的响应速度,也能降低服务端的压力。浏览器执行缓存的流程如下: 试想一下,如果用户主动清空了本地的浏览器缓存,那么是不是请求的压力又来到了服务端,为此我们可以增

    2024年02月11日
    浏览(32)
  • web缓存之nginx缓存

             网络缓存位于客户端和 \\\"源服务器 \\\"之间,保存着所有可见内容的副本。当客户端请求缓存中存储的内容时,它可以直接从缓存中检索内容,而无需与服务器通信。这样,网络缓存就 \\\"接近 \\\"了客户端,提高了响应性能,并更有效地利用了应用服务器,使其不必为每

    2024年01月25日
    浏览(31)
  • 【Nginx20】Nginx学习:FastCGI模块(二)缓存配置

    通过上篇文章的学习,普通的 PHP 与 Nginx 的连接就已经没啥大问题了。一般的网站直接那套配置就够了,这也是 Nginx 非常友好的一面。很多在默认的配置文件中注释掉的内容,只要打开就是可以直接使用的。不过,FastCGI 可不是一个小模块,还有很多的配置指令,要想深入,

    2024年02月11日
    浏览(33)
  • 成功解决 Nginx更新静态资源无效 ,Nginx静态资源更新不及时,Nginx清除缓存

    使用 nginx做动静分离,在将服务器中的静态资源修改后,访问页面,发现页面没有及时更新。 我这里是清除了浏览器缓存。 有关nginx禁止走缓存、直接走服务器请参考以下文章。 资料参考:Nginx更新静态资源不生效 我更新了静态资源下的一个文件。然后正常情况应该是在点

    2024年02月16日
    浏览(33)
  • 多级缓存(nginx本地缓存、JVM进程缓存、redis缓存)

    Caffeine示例 封装完函数之后,我们对nginx.conf进行修改(请求进来之后会去寻找item.lua) item.lua文件内容 上面的item.lua文件中需要进行拼接数据,我们需要JSON结果处理 在实际生产中tomcat是肯定以集群的方式存在 当我们修改nginx.conf发送请求为集群的时候,如下图 这个时候存在

    2024年01月17日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包