Nginx的配置服务端缓存核心配置
常见的开发人员控制的缓存分类
- 数据库缓存
- 应用程序缓存
- Nginx网关缓存
- 前端缓存
让后端结果缓存离用户更进一步
- /root/cache
- 本地路径,用来设置Nginx缓存资源的存放地址
- levels=1:2
- 默认所有缓存文件都放在上面指定的根路径中,可能影响缓存的性能,推荐指定为 2 级目录来存储缓存文件;1和2表示用1位和2位16进制来命名目录名称。第一级目录用1位16进制命名,如a;第二级目录用2位16进制命名,如3a。所以此例中一级目录有16个,二级目录有16*16=256个,总目录数为16 * 256=4096个。
- 当levels=1:1:1时,表示是三级目录,且每级目录数均为16个
- key_zone
- 在共享内存中定义一块存储区域来存放缓存的 key 和 metadata
- max_size
- 最大 缓存空间, 如果不指定会使用掉所有磁盘空间。当达到 disk 上限后,会删除最少使用的 cache
- inactive
- 某个缓存在inactive指定的时间内如果不访问,将会从缓存中删除
- proxy_cache_valid
- 配置nginx cache中的缓存文件的缓存时间,proxy_cache_valid 200 304 2m 对于状态为200和304的缓存文件的缓存时间是2分钟
- use_temp_path
- 建议为 off,则 nginx 会将缓存文件直接写入指定的 cache 文件中
- proxy_cache
- 启用proxy cache,并指定key_zone,如果proxy_cache off表示关闭掉缓存
- add_header Nging-Cache "$upstream_cache_status"
- 用于前端判断是否是缓存,miss、hit、expired(缓存过期)、updating(更新,使用旧的应答)
关键代码如下
proxy_cache_path /root/cache levels=1:2 keys_zone=dbc_cache:10m max_size=1g inactive=60m use_temp_path=off; server { location /{ ... proxy_cache dbc_cache; proxy_cache_valid 200 304 10m; proxy_cache_valid 404 1m; proxy_cache_key $host$uri$is_args$args; add_header Nginx-Cache "$upstream_cache_status"; } }
- 注意:
- nginx缓存过期影响的优先级进行排序为:inactvie > 源服务器端Expires/max-age > proxy_cache_valid
- 如果出现 Permission denied 修改nginx.conf,将第一行修改为 user root
- 默认情况下GET请求及HEAD请求会被缓存,而POST请求不会被缓存,并非全部都要缓存,可以过滤部分路径不用缓存
常见问题
缓存不生效——加上这句话
proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
我想缓存post请求——加上这句话
proxy_cache_methods POST;
本文作者为DBC,转载请注明。