在网站文件中,静态文件如图片、CSS文件、JavaScript文件等占据了很大一部分,通过在Nginx中合理配置静态文件的缓存,可以极大地提高网站的访问速度和性能,同时也能减轻服务器的负载。
1、在配置文件的http模块内通过属性proxy_cache_path设置缓存目录和参数。

- /var/cache/nginx:用于存储缓存文件的目录路径,要确保Nginx进程对这个目录有读写权限。
- levels=1:2:设置缓存目录的层次结构。1:2表示缓存目录有两层,第一层目录名称为1个字母,第二层为2个字母,多级目录可以更好地管理大量的缓存文件。
- keys_zone=my_static_cache:10m:创建一个名为my_static_cache的缓存区域,并分配10MB的内存用于存储缓存的元数据信息。
- max_size=10g:设置整个缓存空间的最大空间为10GB。当缓存文件的总大小超过这个限制时,Nginx会根据一定的算法自动清除一些旧的缓存文件,以保证缓存空间不会无限增长。
- inactive=60m:如果一个缓存文件在60分钟内没有被访问,那么Nginx会将其从缓存中清除,释放空间。
- use_temp_path=off:关闭临时文件的使用,所有缓存文件将直接存储到缓存目录中。
2、在server模块内配置静态文件的缓存规则。

- location ~* \.(jpg|jpeg|png|gif|css|js|svg|woff|woff2|ttf|eot)$:使用正则表达式匹配所有以指定的文件扩展名结尾的url路径,这些扩展名包括常见的图片格式、CSS和JavaScript文件格式以及一些字体相关的文件格式。
- proxy_cache my_static_cache:指定使用前面http模块定义的缓存参数中的my_static_cache缓存区域来存储这些静态文件的缓存。
- proxy_cache_valid 200 302 1h:对于HTTP状态码为200(成功响应)和302(临时重定向)的请求,将缓存时间设置为1小时。在这1小时内如果有相同的请求,Nginx会直接从缓存中返回文件,而不会向服务器请求。
- proxy_cache_valid 404 1m:对于状态码为404(未找到文件)的请求,将缓存时间设置为1分钟。这样即使某个文件不存在,Nginx也会在1分钟内记住这个结果,避免频繁地向服务器发送不存在的文件请求。
- add_header X-Cache-Status $upstream_cache_status:在响应头中添加一个自定义的X-Cache-Status字段,其值为$upstream_cache_status变量的值。这个变量表示了缓存的状态,例如HIT表示命中缓存,MISS表示未命中缓存等,在开发和调试过程中可以通过查看这个响应头来了解缓存的使用情况。
- expires 7d:设置浏览器端对这些静态文件的缓存过期时间为7天。这意味着在7天内,浏览器如果再次访问这些文件,会直接从本地缓存中获取,而不会向服务器发送请求(除非用户强制刷新或者缓存过期)。