zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

流程代理缓存Nginx 处理 反向 Proxy
2023-09-14 09:01:46 时间

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


缓存流程分为两部分,的一部分是接收到客户端发来的请求。首先对于用户的请求是否可以使用缓存,如果在当前的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生成子请求,由这个子请求去更新缓存,同时使用过期的缓存向下游发送响应。如果没有过期就直接向下游返回响应就行。

 

当我们接收到上游响应之后,首先会匹配proxy_no_cache指令,当满足这个条件的时候表示不缓存,这个时候不更新缓存,转发上游响应。Proxy_cache_valide指令是一定需要配置的,它可以决定哪些响应码可以缓存,缓存多长时间,如果没有匹配到proxy_cache_valide指令会转发给上游服务器,匹配到响应码是否为200,206,如果是200,206那么更新cache中的etag和last_modified,因为该字段会在后续的访问中返回给客户端,然后接着处理缓存相关的头部