scgi_cache_lock

'scgi_cache_lock' 指令控制在对已缓存的 SCGI 响应的请求同时处理时是否应用锁。 — NGINX HTTP Core

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

说明

'scgi_cache_lock' 指令在 NGINX 中用于在缓存项正在重新生成时启用或禁用请求锁定。这意味着当某个进程正在为一个不在缓存中的请求生成响应时,后续对相同资源的请求必须等待首个请求完成,从而避免多个并发生成进程。该锁确保一次只有一个进程更新缓存,通过减少对后端服务器的负载来提高缓存完整性和用户体验。如果启用了锁且在响应生成期间收到并发请求,新请求将等待直到响应准备好,而不是直接查询后端。 该指令以标志作为参数,通常为 'on' 或 'off'。默认情况下,如果未指定,锁定行为默认为 'off',这意味着多个请求可能同时触发对后端的多次调用,可能导致后端压力增大或响应时间不一致。用户在决定是否启用此指令时,应谨慎评估其应用的并发需求。

配置示例

http {
    scgi_cache_path /path/to/cache levels=1:2 keys_zone=my_zone:10m;
    location /scgi {
        scgi_pass backend;
        scgi_cache my_zone;
        scgi_cache_lock on; 
    }
}

在大量并发请求发生时,使用 'scgi_cache_lock on' 会增加用户的响应时间,因为他们会等待第一个响应完成。

应谨慎使用锁定,因为启用它可能会导致响应时间延长,尤其是在后端处理缓慢时。