Nginx如何实现静态文件缓存?

Nginx可以通过expires和cache-control指令为静态文件配置缓存。这些指令可以在服务器响应头部添加缓存相关信息,指示客户端缓存文件一定时间,在缓存期内的请求直接从缓存获取,无需重新请求服务器。

expires指令:

  • 用于为响应内容设置过期时间,格式为expires [time|epoch|max|off];
  • time:可以是具体的时间格式,如expires 1h (1小时)
  • epoch:从Epoch时间开始的秒数,如expires 1000 (从1970.1.1 00:00:01开始1000秒)
  • max:可以取值为“now”或具体日期,表示立即过期或指定日期过期
  • off:表示立即过期,相当于max

cache-control指令:

  • 用于控制HTTP响应的缓存机制,格式为cache-control [private|public|no-cache|no-store|max-age=time];
  • private|public:指定响应是否可以被中间代理缓存
  • no-cache:缓存内容需要先与服务器再验证之后使用
  • no-store:完全不缓存内容
  • max-age:缓存内容的最大时间

两者选一配置即可,cache-control优先级更高。

配置示例:

backendlocation ~ .(gif|jpg|png|js|css)$ { 
    expires 1h;   # 1小时过期
    cache-control public;   # 公共缓存
}

location ~ .(html|htm)$ {
    expires 2d;    # 2天过期
    cache-control max-age=864000;  # 最大时间864000秒(10天) 
}

backend上例为gif、jpg、png、js、css类型的响应设置1小时缓存;为html、htm类型的响应设置10天缓存,两种方式选一即可,cache-control的max-age优先级更高。