Hi Gancho, Thanks for the great guide and debug tips! It worked well!
Regards, Chunlin On Mon, Jun 25, 2018 at 11:27 PM, Gancho Tenev <[email protected]> wrote: > Hello Chunlin, > > There are examples of how to migrate from cacheurl.so to cachekey.so here > (please note the version is 7.1.x): > 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= > > > Now if you hit with: > > curl -v -x localhost:8080 'http://example-cdn.com/path/file?kw=test& > geo=country,state,city,street’ > > You would end up with the following ATS log: > > $ ./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 > > > > > On Jun 25, 2018, at 10:02 AM, Chillin Gong <[email protected]> wrote: > > 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 > > > >
