缓存清除

There are several ways to purge cache by making HTTP PURGE requests to the manager uri defined by uri.

You can define customized http method using purge-method MYPURGE other than the default PURGE in case you need to forward PURGE to backend servers.

删除一个特定URL

curl -XPURGE https://127.0.0.1/imgs/test.jpg

生成key GET.scheme.host.uri, 并删除那个key。

默认key 包含Host, 如果缓存时用了http://example.com/test 而在localhost删除是需要Host header:

curl -XPURGE -H "Host: example.com" http://127.0.0.1/test

通过name删除

可以通过带上name header来 PURGE

headers

headervaluedescription
namenuster rule NAMEcaches belong to rule ${NAME} will be purged
proxy NAMEcaches belong to proxy ${NAME}
*all caches

Examples

  1. # 删除所有缓存
  2. curl -X PURGE -H "name: *" http://127.0.0.1/nuster/cache
  3. # 删除backend applb的所有缓存
  4. curl -X PURGE -H "name: app1b" http://127.0.0.1/nuster/cache
  5. # 删除所有rule r1生成的缓存
  6. curl -X PURGE -H "name: r1" http://127.0.0.1/nuster/cache

通过host删除

通过带上x-hostheader来删除所有属于这个host的缓存。

headers

headervaluedescription
x-hostHOSTthe ${HOST}

Examples

  1. curl -X PURGE -H "x-host: 127.0.0.1:8080" http://127.0.0.1/nuster/cache

通过path删除

默认情况下,query部分也包含在key中,所以相同的path不同的query会产生不同的缓存。

比如nuster rule imgs if { path_beg /imgs/ }, 然后请求

  1. curl https://127.0.0.1/imgs/test.jpg?w=120&h=120
  2. curl https://127.0.0.1/imgs/test.jpg?w=180&h=180

会生成两个缓存,因为query不一样。

如果要删除这些缓存,可以

如果知道所有的query,那么可以一个一个删除

  1. curl -XPURGE https://127.0.0.1/imgs/test.jpg?w=120&h=120
  2. curl -XPURGE https://127.0.0.1/imgs/test.jpg?w=180&h=180

大多数情况下不知道所有的query

如果query部分不重要,则可以从key里面删除query

定义nuster rule imgs key method.scheme.host.path if { path_beg /imgs }, 这样的话只会生成一个缓存,那么就可以不用query删除缓存

curl -XPURGE https://127.0.0.1/imgs/test.jpg

大多数情况需要query

通过rule name删除

curl -X PURGE -H "name: imgs" http://127.0.0.1/nuster/cache

但是如果rule被定义成了 nuster rule static if { path_beg /imgs/ /css/ },则无法只删除imgs

因此,可以通过path删除

headers

headervaluedescription
pathPATHcaches with ${PATH} will be purged
x-hostHOSTand host is ${HOST}

Examples

  1. # 删除所有path是/imgs/test.jpg的缓存
  2. curl -X PURGE -H "path: /imgs/test.jpg" http://127.0.0.1/nuster/cache
  3. # 删除所有path是/imgs/test.jpg 并且host是127.0.0.1:8080的缓存
  4. curl -X PURGE -H "path: /imgs/test.jpg" -H "x-host: 127.0.0.1:8080" http://127.0.0.1/nuster/cache

通过正则删除

也可以通过正则删除,所有匹配正则的缓存将被删除。

headers

headervaluedescription
regexREGEXcaches which path match with ${REGEX} will be purged
x-hostHOSTand host is ${HOST}

Examples

  1. # 删除所有 /imgs 开头 .jpg结尾的缓存
  2. curl -X PURGE -H "regex: ^/imgs/.*\.jpg$" http://127.0.0.1/nuster/cache
  3. #delete all caches which path starts with /imgs and ends with .jpg and belongs to 127.0.0.1:8080
  4. curl -X PURGE -H "regex: ^/imgs/.*\.jpg$" -H "127.0.0.1:8080" http://127.0.0.1/nuster/cache

PURGE 注意事项

  • 开启访问控制

  • 如果有多个header,按照name, path & host, path, regex & host, regex, host的顺序处理

curl -XPURGE -H "name: rule1" -H "path: /imgs/a.jpg": purge by name

  • 如果有重复的header,处理第一个

curl -XPURGE -H "name: rule1" -H "name: rule2": purge by rule1

  • regex 不是 glob

比如 /imgs下的.jpg文件是^/imgs/..jpg$ 而不是 /imgs/.jpg

  • 通过rule name或proxy name删除缓存时,需要注意这两种方法只在当前进程有效。如果重启了进程则无法通过这两种方法删除缓存文件,因为rule name信息和proxy name信息并没有保存在缓存文件中。

  • 只有disk load结束后才能通过host or path or regex 来删除缓存文件。是否已经load结束可以查看stats URL。