proxy_cache_lock

当发生缓存未命中时,`proxy_cache_lock` 指令启用对同一资源请求的序列化,以减少对上游服务器的负载。 — NGINX HTTP Core

proxy_cache_lock
httpserverlocation
语法proxy_cache_lock on | off;
默认值off
上下文http, server, location
模块NGINX HTTP Core
参数flag

说明

当将 `proxy_cache_lock` 设置为 on 时,NGINX 会使用锁定机制来防止多个并发请求在缓存中不存在同一资源时同时向上游发送请求。相反,最先到达的请求将获取该资源,随后到达的请求将在第一个请求完成并将内容写入缓存后等待,以便在缓存可用时从缓存中提供该内容。 该指令对于依赖后端服务的 Web 应用在性能和效率方面特别有用,尤其是在缓存未命中可能导致上游请求激增的场景中。通过启用 `proxy_cache_lock`,NGINX 将把对后端服务器的负载降到最低,并减少因多个请求同时请求同一项而压垮后端的风险。 您可以在 `http`、`server` 或 `location` 上下文中使用此指令。在流量较大的环境中,缓存对性能和资源管理至关重要,因此将此选项设置为 on 十分关键。

配置示例

http {
    proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m max_size=1g;
    server {
        location / {
            proxy_pass http://backend;
            proxy_cache my_cache;
            proxy_cache_lock on;
        }
    }
}

启用 `proxy_cache_lock` 可能会在等待第一个请求完成时对后续请求引入延迟。

在较低的 TTLs(生存时间)缓存设置下应谨慎使用此指令,因为在高流量情况下可能导致更长的等待时间。