Nginx proxy反向代理 缓存处理流程

接收到客户端的请求以后缓存模块处理流程


缓存流程分为两部分,的一部分是接收到客户端发来的请求。首先对于用户的请求是否可以使用缓存,如果在当前的location下有proxy_cache指令才会继续往下走,如果是否的话就直接向上游发送请求。当location中有proxy_cache指令会使用proxy_cache_method来判断对哪个method方法使用缓存返回响应,比如get,head,post,否则我们不使用缓存,默认的时候是get和head方法我们才使用缓存当中的内容,这个指令可以出现在http当中,所以可以使用向下合并的规则。当用户请求匹配到cache_methods之后,请求的methods是head方法接下来会根据proxy_cache_convert_head指令将其转化为get方法。再接下来会根据proxy_cache_key关键字$scheme$proxy_host$request_uri生成关键字。根据关键字生成md5。

 

根据关键字检查cache_pass指令指明对于满足条件的哪些请求时不缓存的,条件后面时一些变量的值,当变量值为真代表不缓存直接向上游发送请求。当变量值是否的时候使用缓存的时候就会在proxy_cache指令里面指定的共享内存里寻找缓存是否存在,如果缓存存在读取缓存内容,如果缓存不存在访问上游以后等上游的响应回来了再更新我的缓存。缓存不存在在共享内存当中分配节点再走下面的流程,如果存在就会去更新LRU链表及节点计数,因为缓存是有LRU淘汰的,因为刚刚访问过这个缓存,所以要将其移动到不容易淘汰的地方并且更新LRU链表。

 

如果是错误类响应404或者500就直接向上游发送请求用新的响应来更新缓存,如果不是错误类响应再判断文件是否存在,存在且超过了proxy_cache_min_uses就根据proxy_cache_background_update生成子请求,由这个子请求去更新缓存,同时使用过期的缓存向下游发送响应。如果没有过期就直接向下游返回响应就行。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章