推荐答案
proxy_cache_revalidate
指令用于在 Nginx 中控制缓存内容的重新验证行为。当该指令启用时,Nginx 会在缓存内容过期后,向源服务器发送一个带有 If-Modified-Since
或 If-None-Match
头的请求,以验证缓存内容是否仍然有效。如果源服务器返回 304 Not Modified
响应,Nginx 将继续使用缓存的内容,而不需要重新下载整个资源。
本题详细解读
1. 指令作用
proxy_cache_revalidate
指令的主要作用是优化缓存的使用效率。通过启用该指令,Nginx 可以在缓存内容过期后,仅向源服务器发送一个验证请求,而不是重新下载整个资源。这可以减少带宽消耗,并提高响应速度。
2. 使用场景
- 缓存内容频繁更新:当缓存的内容可能会频繁更新,但实际变化不大的情况下,使用
proxy_cache_revalidate
可以避免不必要的资源下载。 - 减少带宽消耗:在带宽有限的环境中,启用该指令可以有效减少不必要的网络流量。
3. 配置示例
location / { proxy_cache my_cache; proxy_cache_revalidate on; proxy_pass http://backend; }
在上述配置中,proxy_cache_revalidate on;
启用了缓存重新验证功能。当缓存内容过期时,Nginx 会向 http://backend
发送验证请求,以确定缓存内容是否仍然有效。
4. 注意事项
- 源服务器支持:使用
proxy_cache_revalidate
需要源服务器支持If-Modified-Since
或If-None-Match
头的处理。 - 缓存策略:该指令通常与
proxy_cache_valid
指令结合使用,以定义缓存的有效期。
5. 性能影响
启用 proxy_cache_revalidate
可能会增加源服务器的负载,因为每次缓存过期时,Nginx 都会发送验证请求。因此,在高并发场景下,需要权衡缓存验证带来的性能影响。