Re: Set header with value extracted from path
Baptiste, This is exactly what I needed. I hadn't considered doing it in multiple steps like this. Thank you! Ryan On Thu, Dec 4, 2014 at 12:27 AM, Baptiste wrote: > On Thu, Dec 4, 2014 at 12:09 AM, Ryan wrote: > > When I received URL's with the following format: > > > > /1/a/b/c > > > > I rewrite the URL removing the digit like so: > > > > /v2.0.0/a/b/c > > > > And I need to set a header with the value of the digit I replaced, i.e.: > > > > X-ID: 1 > > > > Is it possible to do this within haproxy? I am able to reqrep the > original > > url, and set an ACL to be used with an "http-request add-header" > directive, > > but I dont know how to extract the url value and either save it for use > in > > the add-header, or to write a format string in the add-header directive > that > > will do this. > > > > I'm playing around with something like this but not having much luck: > > > > acl url_id path_reg ^/([0-9]+)/.*$ > > http-request add-header X_ID %[path_reg(^/([0-9]+)/.*$)] if url_id > > > > Any ideas? > > > > Thanks, > > Ryan > > > > Hi Rian, > > Either there is a bug in the code or the documentation is inacurate, > in chapter 7.3.6 HTTP samples. > The document says we can fetch content using a sample called path and > all its derivatives, including path_reg. > > Actually, when I add the following in my conf: > http-request set-header X-blah %[path_reg .*] > I have a configuration parsing error because of the slash. > When I backslash it: > http-request set-header X-blah %[path_reg\ .*] > The configuration is valid (from a syntax point of view) but HAProxy > doesn't do anything. > > > So in your case, I would do this for now: > acl url_id path_reg ^/([0-9]+)/.*$ > http-request set-header X_ID %[path] if url_id > http-request replace-value X_ID ^/([0-9]+)/.*$ \1 if { req.hdr(X_ID) -m > found } > > should do the trick. > > Baptiste >
Re: Set header with value extracted from path
On Thu, Dec 4, 2014 at 12:09 AM, Ryan wrote: > When I received URL's with the following format: > > /1/a/b/c > > I rewrite the URL removing the digit like so: > > /v2.0.0/a/b/c > > And I need to set a header with the value of the digit I replaced, i.e.: > > X-ID: 1 > > Is it possible to do this within haproxy? I am able to reqrep the original > url, and set an ACL to be used with an "http-request add-header" directive, > but I dont know how to extract the url value and either save it for use in > the add-header, or to write a format string in the add-header directive that > will do this. > > I'm playing around with something like this but not having much luck: > > acl url_id path_reg ^/([0-9]+)/.*$ > http-request add-header X_ID %[path_reg(^/([0-9]+)/.*$)] if url_id > > Any ideas? > > Thanks, > Ryan Hi Rian, Either there is a bug in the code or the documentation is inacurate, in chapter 7.3.6 HTTP samples. The document says we can fetch content using a sample called path and all its derivatives, including path_reg. Actually, when I add the following in my conf: http-request set-header X-blah %[path_reg .*] I have a configuration parsing error because of the slash. When I backslash it: http-request set-header X-blah %[path_reg\ .*] The configuration is valid (from a syntax point of view) but HAProxy doesn't do anything. So in your case, I would do this for now: acl url_id path_reg ^/([0-9]+)/.*$ http-request set-header X_ID %[path] if url_id http-request replace-value X_ID ^/([0-9]+)/.*$ \1 if { req.hdr(X_ID) -m found } should do the trick. Baptiste
Set header with value extracted from path
When I received URL's with the following format: /1/a/b/c I rewrite the URL removing the digit like so: /v2.0.0/a/b/c And I need to set a header with the value of the digit I replaced, i.e.: X-ID: 1 Is it possible to do this within haproxy? I am able to reqrep the original url, and set an ACL to be used with an "http-request add-header" directive, but I dont know how to extract the url value and either save it for use in the add-header, or to write a format string in the add-header directive that will do this. I'm playing around with something like this but not having much luck: acl url_id path_reg ^/([0-9]+)/.*$ http-request add-header X_ID %[path_reg(^/([0-9]+)/.*$)] if url_id Any ideas? Thanks, Ryan