Nginx系列
- 入门——Nginx系列——配置详解
- 进阶——Nginx系列——负载均衡配置
- 进阶——Nginx系列——解决跨域与接口可用性探测
- 进阶——Nginx系列——缓存解决接口性能问题
- 进阶——Nginx系列——accessLog日志挖掘与恶意IP封禁
- 进阶——Nginx系列——websocket反向代理与资源压缩
1、架构演变
- 传统架构
- 分布式
- 微服务
上面通过架构的演变我们发现了,时代的变迁导致了架构的变迁,由原先的单一应用变成了现在的多服务集群部署,由原来的单机器编程现在的成百上千台云服务器。这个是在硬件上的改变,需要大量的资源,以及资金。如果我们需要在不改变当前的资金配比的情况下使得服务器处理压力能力再上一层呢?
2、缓存技术
缓存技术可以大大的提高访问速度,减少访问时间常见的缓存技术有:
- 数据库缓存
- 应用程序缓存
- Nginx网关缓存
- 前端缓存
本次我们就来讲讲如何利用Nginx缓存提高我们的接口性能?
上配置:
proxy_cache_path /root/cache levels=1:2 keys_zone=xd_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
location /{
...
proxy_cache xd_cache;
proxy_cache_valid 200 304 10m;
proxy_cache_valid 404 1m;
proxy_cache_key $host$uri$is_args$args;
add_header Nginx-Cache "$upstream_cache_status";
}
}
配置讲解:
- /root/cache:本地路径,用来设置Nginx缓存资源的存放地址
- levels=1:2 :默认所有缓存文件都放在上面指定的根路径中,可能影响缓存的性能,推荐指定为 2
级目录来存储缓存文件;1和2表示用1位和2位16进制来命名目录名称。第一级目录用1位16进制命名,如a;第二级目录用2位16进制命名,如3a。所以此例中一级目录有16个,二级目录有16*16=256个,总目录数为16256=4096个。 - 当levels=1:1:1时,表示是三级目录,且每级目录数均为16个
- key_zone:在共享内存中定义一块存储区域来存放缓存的 key 和 metadata
- max_size :最大 缓存空间, 如果不指定会使用掉所有磁盘空间。当达到 disk 上限后,会删除最少使用的 cache
- inactive:某个缓存在inactive指定的时间内如果不访问,将会从缓存中删除
- proxy_cache_valid:配置nginx cache中的缓存文件的缓存时间,proxy_cache_valid 200 304 2m 对于状态为200和304的缓存文件的缓存时间是2分钟
- use_temp_path:建议为 off,则 nginx 会将缓存文件直接写入指定的 cache 文件中
- proxy_cache:启用proxy cache,并指定key_zone,如果proxy_cache off表示关闭掉缓存
- add_header Nging-Cache “$upstream_cache_status”:用于前端判断是否是缓存,miss、hit、expired(缓存过期)、updating(更新,使用旧的应答),还原nginx配置,只保留upstream模块
注意:
- nginx缓存过期影响的优先级进行排序为:inactvie > 源服务器端Expires/max-age > proxy_cache_valid
- 如果出现 Permission denied 修改nginx.conf,将第一行修改为 user root
- 默认情况下GET请求及HEAD请求会被缓存,而POST请求不会被缓存,并非全部都要缓存,可以过滤部分路径不用缓存
配置结束后需要重启Nginx,当再次访问接口时就不会再次请求接口