插件窝 干货文章 Nginx如何实现HTTP请求的缓存控制配置

Nginx如何实现HTTP请求的缓存控制配置

缓存 Cache proxy Nginx 888    来源:    2025-04-10

Nginx HTTP请求缓存控制配置详解

Nginx提供了强大的缓存控制功能,可以通过多种方式配置HTTP请求的缓存行为。以下是主要的配置方法和策略:

1. 基本缓存控制头设置

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";
}

2. 代理缓存配置

# 定义缓存路径和参数
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;
    }
}

3. 静态资源缓存

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;  # 缓存30天
    add_header Cache-Control "public, no-transform";
    access_log off;
}

4. 缓存键配置

proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";

5. 条件请求处理(ETag/Last-Modified)

location / {
    etag on;  # 启用ETag
    if_modified_since exact;  # 精确匹配Last-Modified时间
}

6. 缓存清除机制

location ~ /purge(/.*) {
    proxy_cache_purge my_cache "$scheme$request_method$host$1$is_args$args";
}

7. 浏览器缓存与CDN缓存分离控制

location / {
    # 浏览器缓存1小时,CDN缓存1天
    add_header Cache-Control "public, max-age=3600, s-maxage=86400";
}

8. 缓存绕过控制

location / {
    # 当有cookie时绕过缓存
    proxy_cache_bypass $http_cookie;

    # 或者根据特定条件绕过
    proxy_cache_bypass $arg_nocache;
}

最佳实践建议

  1. 静态资源使用长期缓存并添加版本号或哈希值
  2. 动态内容根据业务需求设置适当的缓存时间
  3. 对敏感数据禁用缓存
  4. 监控缓存命中率并根据实际情况调整配置
  5. 考虑使用proxy_cache_revalidate来验证过期的缓存项

通过合理配置这些参数,可以显著提高网站性能,同时确保内容的及时更新。