Nginx 内置了一个高效的数据缓存机制,能够显著提升响应速度和降低后端服务器负担。正确配置缓存控制不仅可以加快页面加载速度,还可以节省带宽资源。下面是关于如何在 Nginx 中配置缓存的一些关键概念和常见策略。
缓存类型
Nginex 提供了几种主要类型的缓存:
- Page Cache:最简单的缓存形式,存储整个响应体。适用于静态文件和较少变化的内容。
- Proxy Cache:更灵活的解决方案,缓存代理服务器的响应。适合动态内容,可以进行精细的控制。
- HTTP Upstream Cache:上游缓存,类似于 Proxy Cache,但更注重对上游服务器的负载平衡和高可用性。
缓存配置
以下是一些常见的缓存配置示例:
页面缓存 (Page Cache)
虽然 Nginx 的 page cache 对于大多数情况是自动开启的,但你仍然可以调整其大小和行为:
http {
# 默认情况下开启
sendfile on;
tcp_nopush on;
# 自定义缓存大小
client_body_in_file_only clean;
client_body_temp_path /var/tmp/nginx/client_temp;
client_body_in_single_buffer on;
client_body_buffer_size 128k;
}
代理缓存 (Proxy Cache)
http {
proxy_cache_path /var/tmp/nginx/proxy_cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g use_temp_path=off;
server {
location ~* \.(jpg|jpeg|gif|png|css|js)$ {
proxy_cache my_cache;
proxy_cache_valid 200 302 60m;
proxy_cache_valid any 1m;
proxy_hide_header Set-Cookie;
add_header Cache-Control public;
proxy_ignore_headers Expires;
proxy_no_cache $http_pragma $http_authorization;
}
}
}
这里:
levels=1:2表示层次结构的缓存目录布局。keys_zone定义缓存区域名称和大小。inactive设置空闲时间。max_size设定缓存的最大尺寸。add_header添加缓存控制标头。
控制缓存行为
使用 proxy_cache_valid 控制何时将响应视为有效并加入缓存,以及保留多久。
proxy_cache_valid 200 302 60m;
proxy_cache_valid any 1m;
第一个表示 200 和 302 状态码的响应将在缓存中保持 60 分钟;第二个则是任何其他状态码下的响应保持时间为 1 分钟。
常见策略
- TTL(Time To Live):控制缓存项在缓存中存活的时间。
- Cache Control:利用 HTTP 响应头中的
Cache-Control指令,它提供更精确的控制能力。 - Busting:使用版本号或其他标识在 URL 结尾,防止使用过期缓存。
- Etag:服务器发送一个 ETag 标记,浏览器会再次请求时携带此标记得以验证缓存有效性。
- Stale While Revalidate:先返回旧缓存,同时后台验证缓存的有效性。
总结
通过合理的缓存策略,Nginx 能够显著提升站点性能和用户体验。不过,需要注意的是,过度缓存可能会导致数据滞后显示问题,因此应在性能和时效性之间找到合适的平衡点。缓存配置应当根据具体的应用场景和需求进行细致调整。