点赞
评论
收藏
分享
举报
nginx缓存原理及配置
发表于2020-09-10 09:56

浏览 1.9k

文章标签

1.nginx缓存原理及配置

nginx的http_proxy模块,可以 实现类似于 squid的 缓存功能。

基于nginx静态缓存的解决方案:
这里写图片描述

1.1 nginx cache的基本配置

    proxy_cache_path /data/nginx/cache_item levels=1:1:2  keys_zone=cache_item:10m max_size=10g inactive=60m;  
    server {  
               location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {  
              proxy_set_header Host  $host;
            proxy_set_header X-Forwarded-For  $remote_addr;
            proxy_pass http://127.0.0.1:8080;
                   proxy_cache cache_item;  
                    proxy_cache_key $host$uri$is_args$args;#以全路径md5值做做为Key
                    proxy_cache_valid 200 304 12h; #对不同的HTTP状态码设置不同的缓存时间
                    expires 7d; #总体缓存时间
           }  
    }  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

上述参数说明如下:

父元素名称描述
httpproxy_cache_path指定缓存区的根路径
levels缓存目录级最高三层,每层1-2个字符表示。如1:1:2三层。
keys_zone缓存块名称及内存块大小。如cache_item:500m表示声明一个名为cache_item大小为500m。超出大小 后最早的数据将被清除。
max_size缓存区硬盘的 最大值。超出闲置数据将被清除
inactive最长闲置时间 如10d 如果一个 数据被闲置10天则将被清除
locationproxy_cache指定缓存区,对应keys_zone中设定的值
proxy_cache_key通过参数拼装参数key如:$host$uri$is_args$args则会以全部领md5值做为key
proxy_cache_valid对不同的状态码设置缓存有效期

1.2 缓存的清除

该功能 可以采用第三方模块ngx_cache_purge实现:

为nginx添加ngx_cache_purge模块

#下载ngx_cache_purge 模块包 ,这⾥nginx 版本为1.6.2 purge 对应2.0版

wget http://labs.frickle.com/files/ngx_cache_purge-2.0.tar.gz

#查看已安装模块

./sbin/nginx -V

#进⼊nginx安装包⽬录 重新安装 --add-module为模块解压的全路径

./configure --prefix=/root/svr/nginx --with-http_stub_status_module --with-http_ssl_module --
add-module=/root/svr/nginx/models/ngx_cache_purge-2.0

#重新编译

make

#拷⻉ 安装⽬录/objs/nginx ⽂件⽤于替换原nginx ⽂件
#检测查看安装是否成功

nginx -t
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

清除配置:

location ~ /purge(/.*) {
   #允许访问的IP
   allow 127.0.0.1;
   allow 192.168.0.193;
   #禁⽌访问的IP
   deny all;
   #配置清除指定缓存区和路径(与proxy_cache_key⼀⾄)
   proxy_cache_purge cache_item $host$1$is_args$args;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1.3 测试

1、首次访问:
http://localhost8080/demo/images/logo.jpg
2、缓存清理
http://localhost8080/purge/demo/images/logo.jpg

已修改于2023-03-09 02:06
创作不易,留下一份鼓励
守望

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
守望
这家伙很懒还未留下介绍~
89
文章
0
问答
17
粉丝
相关文章
分布式系统提升可用性时,最有效的方案就是在空间维度上,将资源复制一份作为缓存,并把缓存放在离用户更近的地方。这样,通过缩短用户的访问路径,不只可以降低请求的时延,多份资源还能提升系统的健壮性。比如WEB服务中的CDN就是这样一个缓存系统。 Nginx由于具有下面3个特性,因此是最合适的缓存系统:l 首先,高并发、低延迟赋予了Nginx优秀的性能;l 其次,多进程架构让Nginx具备了很高的稳定性;l 最后,模块化的开源生态,以及从开放中诞生的Openresty、Kong等其他体系,这都让Nginx的功能丰富而强大。 所以,Nginx往往部署在企业最核心的边缘位置,在最外层的Nginx上部署共享缓存,能够给服务带来更大的收益,更短的访问路径带来了更佳的用户体验。然而,当整个系统的可用性极度依赖Nginx的缓存功能时,我们必须仔细地配置Nginx,还得使用到缓存的许多进阶功能。 比如,在超大流量下如果热点资源的缓存失效,那么在巨大的流量穿透Nginx缓存后,非常有可能把脆弱的上游服务打挂。此时合并回源请求功能,就是你的最佳应
点赞 12
浏览 2.5k
本文是我对2019年GOPS深圳站演讲的文字整理。这里我希望带给各位读者的是,如何站在整个互联网背景下系统化地理解Nginx,因为这样才能解决好大流量分布式网络所面临的高可用问题。标题里有“巧用”二字,何谓巧用?同一个问题会有很多种解决方案,但是,各自的约束性条件却大不相同。巧用就是找出最简单、最适合的方案,而做到这一点的前提就是必须系统化的理解Nginx!本文分四个部分讲清楚如何达到这一目的:首先要搞清楚我们面对的是什么问题。这里会谈下我对大规模分布式集群的理解;Nginx如何帮助集群实现可伸缩性;Nginx如何提高服务的性能;从Nginx的设计思路上学习如何用好它。1.大规模分布式集群的特点互联网是一个巨大的分布式网络,它有以下特点:多样化的客户端。网络中现存各种不同厂商、不同版本的浏览器,甚至有些用户还在使用非常古老的浏览器,而我们没有办法强制用户升级;多层代理。我们不知道用户发来的请求是不是通过代理翻墙过来的;多级缓存。请求链路上有很多级缓存,浏览器、正反向代理、CDN等都有缓存,怎么控制多级缓存?RFC规范中有明确的定义,但是有些Server并不完全遵守;不可控的流量风暴。
点赞 10
浏览 3.1k
介绍nginx网页配置工具QQ技术交流群1:1106758598QQ技术交流群2:560797506邮箱: cym1102@qq.com官网地址: http://www.nginxwebui.cn码云: https://gitee.com/cym1102/nginxWebUIgithub: https://github.com/cym1102/nginxWebUI功能特点nginxWebUI也可管理多个nginx服务器集群,随时一键切换到对应服务器上进行nginx配置,也可以一键将某台服务器配置同步到其他服务器,方便集群管理.部署此项目后,配置nginx再也不用上网各种搜索配置代码,再也不用手动申请和配置ssl证书,只需要在本项目中进行增删改查就可方便的配置和启动nginx。技术说明本项目是基于springBoot的web系统,数据库使用sqlite,因此服务器上不需要安装任何数据库项目启动时会释放一个.sqlite.db到系统用户文件夹中,注意进行备份本系统通过Let'sencrypt申请证书,使用acme.sh脚本
点赞 6
浏览 6.3k