Nginx提供了强大的缓存控制功能,可以通过多种方式配置HTTP请求的缓存行为。以下是主要的配置方法和策略:
location / {
# 禁止缓存
add_header Cache-Control "no-cache, no-store, must-revalidate";
add_header Pragma "no-cache";
add_header Expires 0;
# 或者设置缓存时间(示例:1小时)
# add_header Cache-Control "public, max-age=3600";
}
# 定义缓存路径和参数
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;
server {
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m; # 成功响应缓存10分钟
proxy_cache_valid 404 1m; # 404响应缓存1分钟
proxy_cache_valid any 5m; # 其他响应缓存5分钟
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_background_update on;
proxy_cache_lock on;
# 传递客户端缓存控制头
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d; # 缓存30天
add_header Cache-Control "public, no-transform";
access_log off;
}
proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";
location / {
etag on; # 启用ETag
if_modified_since exact; # 精确匹配Last-Modified时间
}
location ~ /purge(/.*) {
proxy_cache_purge my_cache "$scheme$request_method$host$1$is_args$args";
}
location / {
# 浏览器缓存1小时,CDN缓存1天
add_header Cache-Control "public, max-age=3600, s-maxage=86400";
}
location / {
# 当有cookie时绕过缓存
proxy_cache_bypass $http_cookie;
# 或者根据特定条件绕过
proxy_cache_bypass $arg_nocache;
}
proxy_cache_revalidate
来验证过期的缓存项通过合理配置这些参数,可以显著提高网站性能,同时确保内容的及时更新。