k8s nginx ingress配置http缓存

nginx ingress作为全局负载均衡,在提供七层反向代理功能之外,但是不要忘了nginx强大的缓存功能,配置缓存之后能很大程度上解决上游服务器的压力,提升网站响应速度。

上面简单画了个架构图,现在我们已经有了一套nginx ingress controller跑在集群中,现在来了一个新业务,例如dog.starbugs.net,其中这个服务中有些页面需要进行缓存

在安装nginx ingress controller的时候,我们可以提前挂载一个pv,规划用来进行缓存。而缓存的目录提前规划好例如/data/nginx-cache,所以在安装的时候,pod的template中我们就将这个目录进行挂载,为了简单起见这里没有搭建存储集群,而是直接使用阿里云的存储NAS,如果对IO性能要求更高,可以选择CPFS,两者使用方法差不多。

首先创建pv/pvc:

在nginx ingress controller中进行挂载:

到这里,安装好nginx ingress controller之后,缓存的目录也就挂载好了:

然后ingress controller这里的配置就完成了,接下来就是在新接入的服务中配置缓存,这里使用virtualserver来提供七层负载均衡。服务方面我搭建了一套WordPress网站,现在希望就是每个文章的页面能进行缓存。首先使用http-snippets在http块中配置,这里要注意的就是proxy_cache_path 设置的目录必须要在我们在nginx controller挂载的目录内,否则缓存将不能持久化到NAS中:

然后就是在location-snippets中使用这个缓存,并且同时添加了一个响应头部 x_cache_status,用于显示缓存使用状态

部署完这个virtualserver之后,显示工作正常:

最后访问进行验证:

第一次刷新status是MISS
再次刷新状态为HTI,命中了

再将这个nas挂载到服务器上,进去确认一下,可以看到文件被缓存到NAS中了:

留下评论