ウェブキャッシュサーバnuster入門-2(Purge)

前回は [ウェブキャッシュサーバnuster入門-1(基本)](https://qiita.com/kbe/items/d366d7a387de3d18fb96) でnusterを簡単に紹介しました。その後いろいろなPurge機能を追加したので、今回はPurgeについて紹介したいと思います。

仕様は変更されるかもしれないので、最新のものはhttps://github.com/jiangwenyuan/nuster/blob/master/README.md を参照してください。

## Purge Cache

いくつかの方法でPurgeできます。Purge機能はディフォルトでOffなので、Onにする必要があります。

### Purgeを有効にする

`global`セクションで `nuster cache on uri /nuster/cache`のようにPurge用のuriを設定することでPurgeを有効にします。uriはなんでもいいです。

そしてディフォルトのPurgeメソッドは`PURGE`ですが、`purge-method MYPURGE`で別のメソッドも設定できます。

### 基本の使い方

`curl -X PURGE http://127.0.0.1/URI`

URIは基本先設定した `/nuster/cache`で、唯一の例外は１つURLをPurgeするとき、そのURLを使います。

### １つURLをPurge

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

`GET /imgs/test.jpg`で生成したキャッシュをPurgeする、HEADERなどは問いません。

### nameでPurge

nuster-ruleのname、proxyのname、もしくは`*`でPurgeできます。

***headers***

| header | value           | description
| ------ | -----           | -----------
| name   | nuster-rule NAME | nuster-rule ${NAME} で生成したキャッシュをPurge
|        | proxy NAME      | proxy ${NAME}のキャッシュをPurge
|        | *               | すべてのキャッシュをPurge

***Examples***

```
# すべてのキャッシュをPurge
curl -X PURGE -H "name: *" http://127.0.0.1/nuster/cache

# proxy app1bのすべてのキャッシュをPurge
curl -X PURGE -H "name: app1b" http://127.0.0.1/nuster/cache

# nuster-rule r1が生成したキャッシュをすべてPurgeする
# つまり /imgs/* のキャッシュをすべてPurgeする
# nuster-rule r1 imgs if { path_beg /imgs/ }
curl -X PURGE -H "name: r1" http://127.0.0.1/nuster/cache
```

### HostでPurge

そのHostのすべてのキャッシュをPurgeできます。

***headers***

| header | value | description
| ------ | ----- | -----------
| x-host | HOST  | the ${HOST}

***Examples***

```
# 127.0.0.1:8080のすべてのキャッシュをPurge
curl -X PURGE -H "x-host: 127.0.0.1:8080" http://127.0.0.1/nuster/cache
```

### pathでPurge

ディフォルトで同じpathでもqueryが違うなら、生成したキャッシュも違います。

例えば `nuster-rule imgs if { path_beg /imgs/ }`,そして

```
curl https://127.0.0.1/imgs/test.jpg?w=120&h=120
curl https://127.0.0.1/imgs/test.jpg?w=180&h=180
```
すると、２つのキャッシュが生成されます。

pathでpurge以外は、いくつかの方法でPurgeできます

***一つずつ***

```
curl -XPURGE https://127.0.0.1/imgs/test.jpg?w=120&h=120
curl -XPURGE https://127.0.0.1/imgs/test.jpg?w=180&h=180
```
でもqueryがわからない場合はできません。

***もしqueryが重要ではないなら、カスタマイズのkeyを使う***

`nuster-rule imgs key method.scheme.host.path if { path_beg /imgs }`,すると１つのキャッシュしか生成されません。そして、queryなしでpurgeできます。

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

でもqueryが重要の場合はできません。

***cache-ruleでpurge***

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

すると、 `/imgs/test.jpg`だけでなく、他の `/imgs/*`もPurgeされます。

なので、pathでPurge

***headers***

| header | value | description
| ------ | ----- | -----------
| path   | PATH  | pathが${PATH}のキャッシュをpurge
| x-host | HOST  | そして host が ${HOST}

***Examples***

```
# pathが/imgs/test.jpg のキャッシュをPurge
curl -X PURGE -H "path: /imgs/test.jpg" http://127.0.0.1/nuster/cache

# pathが/imgs/test.jpgで hostが127.0.0.1:8080のキャッシュをPurge
curl -X PURGE -H "path: /imgs/test.jpg" -H "x-host: 127.0.0.1:8080" http://127.0.0.1/nuster/cache
```

### regexでPurge

***headers***

| header | value | description
| ------ | ----- | -----------
| regex  | REGEX | pathが${REGEX} matchならPurge
| x-host | HOST  | そして host が ${HOST}

***Examples***

```
# /img下の.jpgファイルのキャッシュをPurge
curl -X PURGE -H "regex: ^/imgs/.*\.jpg$" http://127.0.0.1/nuster/cache

#/img下の.jpgファイルかつHostが 127.0.0.1:8080のキャッシュをPurge 
curl -X PURGE -H "regex: ^/imgs/.*\.jpg$" -H "127.0.0.1:8080" http://127.0.0.1/nuster/cache
```