Nginx性能调优之高速缓存

Nginx可以缓存一些文件(一般是静态文件),减少Nginx与后端服务器的IO,提高用户访问速度。而且当后端服务器宕机时,Nginx服务器能给出相应的缓存文件响应相关的用户请求。
在这里插入图片描述

一 Nginx静态缓存基本配置

在tomcat的webapps目录下创建hello.html,内容写上“this is cache file”,充当要被缓存的文件;在/usr/local/nginx目录下创建cache_snowman文件夹(缓存区)用于存放缓存文件

1.配置http和location

缓存参数详细说明

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

在http元素下添加缓存区声明

proxy_cache_path /usr/local/nginx/cache_snowman levels=1:2 keys_zone=cache_snowman:500m inactive=10d max_size=1g;

指定location设定缓存策略

#指定缓存区
proxy_cache cache_snowman;
#以全路径md5值做做为Key,可以理解为缓存文件名
proxy_cache_key $host$uri$is_args$args;
#对不同的HTTP状态码设置不同的缓存时间
proxy_cache_valid 200 304 12h;

在这里插入图片描述
可能levels这个参数有点难理解,在这里levels=1:2,意思就是以缓存文件名倒数生成两级目录,假设缓存文件名是123456,那么就会出现cache_snowman/6/45/123456

启动tomcat和nginx
访问hello.html文件

curl 127.0.0.1/snowman/hello.html

2.访问生成缓存文件

查看生成的缓存文件
在这里插入图片描述
关掉tomcat,访问仍然成功,因为走的是缓存文件
在这里插入图片描述

二 清除缓存

当页面被修改时就不能把之前缓存响应出去,应该把缓存清除掉。
在这里插入图片描述
清除缓存可以采用第三方模块 ngx_cache_purge 实现。

1.把ngx_cache_purge 模块添加进nginx

  • 下载ngx_cache_purge 模块包
	wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz

(可以用./sbin/nginx -V命令查看已安装模块)

  • 进入nginx安装包目录 重新安装 --add-module为模块解压的全路径
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=(ngx_cache_purge模块解压文件全路径)
  • 重新编译
make
  • 拷贝安装目录 /objs/nginx 文件用于替换原nginx/sbin/下的nginx文件,拷贝前记得先关闭nginx。

(可以用nginx -t 检测查看安装是否成功)

2.清除缓存配置

配置location

location ~ /clear(/.*) {
  #允许访问的IP
   allow           IP;
   #禁止访问的IP
   deny            all;
   #配置清除指定缓存区和路径(与proxy_cache_key一至)
   proxy_cache_purge (缓存区名) $host$1$is_args$args;
}

在这里插入图片描述
前三行代码的意思是除了本机和虚拟机可以调用其他IP都拒绝(这个要根据业务来定)
注意:$host$1$is_args$args,$1的意思是把“clear”路径剔除,不然会把它加进去一起md5(也就是192.168.1.101/ clear /snowman/hello.html),和之前的缓存文件不同名找不到,这就不对了。

3.检测

(我的虚拟机IP是192.168.1.66)
访问生成缓存文件
http://192.168.1.66/snowman/hello.html
清除生成的缓存
http://192.168.1.66/clear/snowman/hello.html
在这里插入图片描述
出现成功页面就说明缓存文件已经被删除。

如果指定缓存不存在则会报404 错误,再访问一次清除缓存。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/snow____man/article/details/83618879