Nginx业务接口性能优化

DBC 200 0

Nginx的配置服务端缓存核心配置

常见的开发人员控制的缓存分类

  • 数据库缓存
  • 应用程序缓存
  • 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;

发表评论 取消回复
表情 图片 链接 代码

分享