Nginx 反代缓存的基础配置
Nginx 反代默认不缓存,部分场景下,默认配置可能会使源站压力过高并降低网站性能。在这里写一下 Nginx 缓存的配置方法。
反代缓存
和浏览器缓存的机制类似,不过内容缓存在 Nginx 中。
浏览器缓存一般只保留在用户电脑的内存或磁盘中,关闭浏览器就会清除缓存,且多个用户不能直接共享相同的缓存。
反代侧添加缓存在静态资源较多、用户量大、源站性能不佳时对性能改善比较明显,缓存保存在服务器内存或硬盘中,缓存时间和大小均可自定义。多个用户访问同一静态资源,Nginx 只需要向源服务器访问一次。
基础配置
在 Nginx 的 HTTP 块中加入下面的内容:
1 |
|
参数解释:
/var/cache/nginx
指定一个绝对路径作为缓存存储目录levels=1:2
缓存目录结构,第一级目录使用 1 个字符,第二级目录使用 2 个字符
最终效果类似 /var/cache/nginx/a/bc/xxxxxxxxxxxxkeys_zone=global:30m
缓存区域名称和元数据缓存大小
元数据缓存(或者叫缓存索引)驻留在内存中,每 MB 约可存储万条缓存项max_size=1800m
缓存在磁盘上使用的最大空间
填满后,自动删除长期未使用的缓存inactive=365d
缓存的最长时间,是保底规则
HTTP 标头报告的缓存优先级更高use_temp_path=off
先将缓存写入临时目录,再写入设置的目录
部分 NFS 或 FUSE 可能需要设置为 on 才能工作
完成缓存区域的创建以后,为反代的网站开启缓存:
以下内容均需要在反代配置下方加入,也可以多个网站共同 include 一个缓存配置。include 用法如下:
1 |
|
然后添加缓存配置:
1 |
|
在 proxy_cache
后加缓存区域名称。最简单的基础配置,Nginx 将根据源站的标头自动进行缓存。
此处可以添加更多保底规则(一般情况下,非 200 状态码源站很可能不返回缓存控制信息,如果在源站未明确要求是否缓存,就使用此处的规则)
不添加任何其他规则时,Nginx 将跟随源站进行缓存。可以改善性能并且一般不会出现访问问题。完整的规则列表请参考这里
其他配置
忽略源站配置,强制配置单独的缓存规则:
HTTP 块中:
1 |
|
通常不推荐。建议的做法是在源站完善配置,然后 Nginx 配置跟随源站并设置保底规则,而不是完全忽略源站的缓存控制。
完全手动配置缓存更灵活,但是可能导致访问出现问题,下面是一些配置建议:
- 不要缓存网站的登录页面和后台,可能会导致访问失败和数据泄露
- 不要缓存网站评论系统,可能会导致无法刷新出评论内容或重复评论。
ZFS
缓存在 ZFS 上时,推荐一个配置:
1 |
|