apisix的proxy-cache设置

2,482 阅读2分钟

1、设置本地域名

  • 为了跟线上环境类似,把ip统一设置成域名
  • windows电脑C:\Windows\System32\drivers\etc里的hosts文件设置域名
127.0.0.1 test.minigame.com
  • 执行ipconfig /flushdns,会显示Windows IP 已成功刷新DNS解析缓存

2、apisix安装

git clone https://github.com/apache/apisix-docker.git  
cd apisix-docker/example
  • 更改apisix的默认端口9080为80

image.png

  • 执行运行命令
docker-compose -p docker-apisix up -d

3、开启本地web服务,设置路由

  • 新增一个路由,test.minigame.com域名默认指向本地其他服务,这里假设访问是本地新开5501端口的微游中心服务

image.png

image.png

  • 用浏览器打开test.minigame.com,这时候显示的内容就是跟5501端口一致

注意:如果页面显示内容不一样,需要检测下是否是因为本地80端口被其他服务占用了。

4、安装apisix上的proxy-cache插件

  • 你可以在 APISIX 配置文件 conf/config.yaml 中添加你的缓存配置
proxy_cache: # 代理缓存配置  
cache_ttl: 10s # 如果上游未指定缓存时间,则为默认缓存时间  
zones: # 缓存的参数  
- name: disk_cache_one # 缓存名称(缓存区域),管理员可以通过 admin api 中的 cache_zone 字段指定要使用的缓存区域  
memory_size: 50m # 共享内存的大小,用于存储缓存索引  
disk_size: 1G # 磁盘大小,用于存储缓存数据  
disk_path: "/tmp/disk_cache_one" # 存储缓存数据的路径  
cache_levels: "1:2" # 缓存的层次结构级别
  • 在路由配置中,设置插件配置

image.png

{  
"cache_key": ["$uri", "-cache-id"],  
"cache_bypass": ["$arg_bypass"],  
"cache_method": ["GET"],  
"cache_http_status": [200],  
"hide_cache_headers": true,  
"no_cache": ["$arg_test"]  
}

5、重新打开test.minigame.com,是否开启缓存数据

  • 出现字段Apisix-Cache-Status:EXPIRED

image.png

  • 重新访问,出现Apisix-Cache-Status: HIT,命中缓存

image.png

6、apisix默认缓存到硬盘

  • 对于基于磁盘的缓存,不能动态配置缓存的过期时间,只能通过后端服务响应头 Expires 或 Cache-Control 来设置过期时间,当后端响应头中没有 Expires 或 Cache-Control 时,默认缓存时间为 10 秒钟
  • 可以手动设置5501端口服务的强缓存,提高缓存时间
  • 可以通过disk_path设置缓存数据的路径
  • 一些需要注意的现象:
    • a、把缓存数据映射到本地磁盘,这时候日志会报找不到缓存数据而出现缓存miss