Post by Gancho TenevHello Chunlin,
There are examples of how to migrate from cacheurl.so to cachekey.so here
https://docs.trafficserver.apache.org/en/7.1.x/admin-
guide/plugins/cachekey.en.html#cacheurl-plugin-to-
cachekey-plugin-migration
I am not familiar with the exact requirements, i.e. the desired cache key
or the exact regex/capture definition used by your cacheurl configuration
but here is an example below.
You could experiment with various combinations of cachekey parameters,
regexes and replacement strings (enable ATS log or XDebug plugin as
described in the doc). The following is just an example to demo the idea.
Let us say you would like to capture the everything before â?' and the
query parameter âgeo' with the first 3 comma-separated elements from its
values.
Add a remap rule with a cachekey parameter to
- capture part of the whole URI as a prefix (http://example-cdn.com/
pathfile) and then
- capture part of the whole URI as a path (geo=country,state,city)
- remove all query parameters and
- use an empty string as a cachekey element separator (you could leave
it to its default â/â as well).
map http://example-cdn.com http://example.com:8888 \
@plugin=cachekey.so \
@pparam=--capture-prefix-uri=/([^\?]*)?/$1/ \
@pparam=--capture-path-uri=/.*(geo=[^,]+,[^,]+,[^,]+)/?$1/ \
@pparam=--remove-all-params=true \
@pparam=--separator=
curl -v -x localhost:8080 'http://example-cdn.com/path/file?kw=test&
geo=country,state,city,streetâ
$ ./bin/traffic_server -T cachekey
traffic_server: using root directory '/Users/gtenev/works/ats_dev/
apache/run/trafficserver'
[Jun 25 23:05:21.829] Server {0x7fffb72f1380} DIAG: (cachekey)
experimental/cachekey/configs.cc:365:init() processing
--capture-prefix-uri=/([^\?]*)?/$1/
[Jun 25 23:05:21.829] Server {0x7fffb72f1380} DIAG: (cachekey)
experimental/cachekey/pattern.cc:334:compile() compiling
pattern:'([^\?]*)?', replace: true, replacement:'$1'
[Jun 25 23:05:21.829] Server {0x7fffb72f1380} DIAG: (cachekey)
experimental/cachekey/configs.cc:365:init() processing
--capture-path-uri=/.*(geo=[^,]+,[^,]+,[^,]+)/?$1/
[Jun 25 23:05:21.829] Server {0x7fffb72f1380} DIAG: (cachekey)
experimental/cachekey/pattern.cc:334:compile() compiling
pattern:'.*(geo=[^,]+,[^,]+,[^,]+)', replace: true, replacement:'?$1'
[Jun 25 23:05:21.829] Server {0x7fffb72f1380} DIAG: (cachekey)
experimental/cachekey/configs.cc:365:init() processing
--remove-all-params=true
[Jun 25 23:05:21.829] Server {0x7fffb72f1380} DIAG: (cachekey)
experimental/cachekey/configs.cc:365:init() processing --separator=
[Jun 25 23:05:24.905] Server {0xb0016000} DIAG: (cachekey)
experimental/cachekey/pattern.cc:277:replace() replacing:'$1' in
pattern:'([^\?]*)?', subject:'http://example-cdn.
com/path/file?kw=test&geo=country,state,city,street'
[Jun 25 23:05:24.905] Server {0xb0016000} DIAG: (cachekey)
experimental/cachekey/pattern.cc:308:replace() replacing '$1' with '
http://example-cdn.com/path/file'
[Jun 25 23:05:24.905] Server {0xb0016000} DIAG: (cachekey)
experimental/cachekey/pattern.cc:318:replace() replacing '$1' resulted in
'http://example-cdn.com/path/file'
[Jun 25 23:05:24.905] Server {0xb0016000} DIAG: (cachekey)
experimental/cachekey/cachekey.cc:305:appendPrefix() added URI capture
prefix, key: 'http://example-cdn.com/path/file'
[Jun 25 23:05:24.905] Server {0xb0016000} DIAG: (cachekey)
experimental/cachekey/pattern.cc:277:replace() replacing:'?$1' in
pattern:'.*(geo=[^,]+,[^,]+,[^,]+)', subject:'http://example-cdn.
com/path/file?kw=test&geo=country,state,city,street'
[Jun 25 23:05:24.906] Server {0xb0016000} DIAG: (cachekey)
experimental/cachekey/pattern.cc:308:replace() replacing '$1' with
'geo=country,state,city'
[Jun 25 23:05:24.906] Server {0xb0016000} DIAG: (cachekey)
experimental/cachekey/pattern.cc:318:replace() replacing '?$1' resulted
in '?geo=country,state,city'
[Jun 25 23:05:24.906] Server {0xb0016000} DIAG: (cachekey)
experimental/cachekey/cachekey.cc:348:appendPath() added URI capture
(path), key: 'http://example-cdn.com/path/file?geo=country%2Cstate%2Ccity'
[Jun 25 23:05:24.906] Server {0xb0016000} DIAG: (cachekey)
experimental/cachekey/cachekey.cc:595:finalize() finalizing cache key '
http://example-cdn.com/path/file?geo=country%2Cstate%2Ccityâ
HTH! Please let me know how it goes!
Cheers,
âGancho
Hi,
I am a new user of traffic server. Recently I am trying to migrate a
product from ATS5 to latest ATS7. In ATS5, we use the cache feature, and
use the cacheurl plugin and regular expressions to extract partial value of
a query parameter to comprise the cache key. However, I didn't find
corresponding feature in ATS7 cachekey plugin to get partial value of a
query parameter.
For example, our request url is something like
"/my/path?kw=test&geo=<country>,<state>,<city>,<street>". In ATS5, we can
get "geo=<country>,<state>,<city>" (without <street>) as our cache key.
However, I didn't find similar syntax to get such partial value with
cachekey plugin in ATS7.
https://docs.trafficserver.apache.org/en/7.0.x/admin-guide/
plugins/cachekey.en.html
Does anyone know how I can achieve similar feature with cachekey plugin or other plugins?
Thanks,
Chunlin Gong