企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 说明 当缓存失效,那么请求会穿透nginx,如果上游服务器和代理服务器性能相差过大,可能导致上游服务器负载过大,从而瘫痪; ![](https://img.kancloud.cn/36/78/367844d4daebb521508cd7372557be2a_1354x210.png) ## proxy_cache_lock 当缓存失效后,假如有三个相同URI的源请求会穿透nginx代理,导致访问了上游服务器三次,这无疑会增加上游服务器的压力; 当这个指令被设置为on,之后三个相同源请求只有一个会被转发给上游服务器,其它的会进行等待;当上游服务器完全响应之后,nginx代理会缓存内容并响应给客户端,剩余的两个请求直接去缓存中读取响应内容即可; **如果是下载文件怎么办?** ``` proxy_cache_lock on | off; ``` 默认值: ``` proxy_cache_lock off; ``` 上下文: ``` http | server | location ``` ## proxy_cache_lock_timeout 接上面,当第一个请求由于某种原因迟迟没有响应,等5秒之后,后面两个请求依然会去请求上游服务器;那么这样设置就没有意义了; 还有一个问题就是,如果是下载一个文件,5S的时间如果无法下载完成,后面的请求依然会等待,这个就比较麻烦了,所以这个怎么办? ``` proxy_cache_lock_timeout time; ``` 默认值: ``` proxy_cache_lock_timeout 5s; ``` 上下文: ``` http | server | location ``` ## proxy_cache_lock_age 假如有三个请求,当第一个请求5秒后没有响应,发送第二个,第二个也没有响应再发送第三个;也就是说这个请求合并是一个一个的发送的的; ``` proxy_cache_lock_age time; ``` 默认值: ``` proxy_cache_lock_age 5s; ``` 上下文: ``` http | server | location ``` ## 示例 ``` location / { proxy_cache cache_zone; proxy_no_cache $nocache; proxy_cache_valid 200 5m; add_header Nginx-Cache-Status "$upstream_cache_status"; proxy_cache_lock on; proxy_cache_lock_timeout 5s; proxy_cache_lock_age 5s; proxy_pass http://back_end; } ```