relayd to match http request according to path and change headers

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

relayd to match http request according to path and change headers

Stephane Guedon
Good day.

I have a setup in OpenBSD 6.8, relayd / httpd and wish to see if I can
have specific http options or headers depending on paths in the requests.

Can I do "match path ..." and set headers ? Until now, all doc I read
say you can set headers globally but not on specific paths.

I can set tags, but trying to match on them and set headers after
triggers syntax error.

Here is an extract of the relayd.conf, where I wish to match on the
static path. I got syntax error when I test this conf (currently
commented) :

http protocol https {
    # Various TCP options
    tcp { nodelay, sack, socket buffer 65536, backlog 128 }

    ...

    #match path "/static/*" {
    #response header set "Access-Control-Allow-Methods" value
"GET,OPTIONS"
    #response header  set "Access-Control-Allow-Headers" value
"Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-
Modified-Since,Cache-Control,Content-Type"
    #       }

    pass request path "/static/*" forward to <webhosts>
    pass request path "/tracker/socket"     forward to <apihosts>
    pass request path "/socket.io"          forward to <apihosts>
    pass request path "/*"                  forward to <apihosts>
    }

Thanks for answers.


Reply | Threaded
Open this post in threaded view
|

Re: relayd to match http request according to path and change headers

openbsd-25
Just a idea, have you tried the keyword request ?

Something like

match request path "/static/*" forward to <webhosts>

Regards,

Christoph

Am 04.04.2021 10:13, schrieb Stephane Guedon:

> Good day.
>
> I have a setup in OpenBSD 6.8, relayd / httpd and wish to see if I can
> have specific http options or headers depending on paths in the
> requests.
>
> Can I do "match path ..." and set headers ? Until now, all doc I read
> say you can set headers globally but not on specific paths.
>
> I can set tags, but trying to match on them and set headers after
> triggers syntax error.
>
> Here is an extract of the relayd.conf, where I wish to match on the
> static path. I got syntax error when I test this conf (currently
> commented) :
>
> http protocol https {
>     # Various TCP options
>     tcp { nodelay, sack, socket buffer 65536, backlog 128 }
>
>     ...
>
>     #match path "/static/*" {
>     #response header set "Access-Control-Allow-Methods" value
> "GET,OPTIONS"
>     #response header  set "Access-Control-Allow-Headers" value
> "Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-
> Modified-Since,Cache-Control,Content-Type"
>     #       }
>
>     pass request path "/static/*" forward to <webhosts>
>     pass request path "/tracker/socket"     forward to <apihosts>
>     pass request path "/socket.io"          forward to <apihosts>
>     pass request path "/*"                  forward to <apihosts>
>     }
>
> Thanks for answers.

Reply | Threaded
Open this post in threaded view
|

Re: relayd to match http request according to path and change headers

Stephane Guedon
Le dimanche 4 avril 2021 11:31:27 CEST, vous avez écrit :

> Just a idea, have you tried the keyword request ?
>
> Something like
>
> match request path "/static/*" forward to <webhosts>
>
> Regards,
>
> Christoph
>

Actually, it's not at the forward stage that I have a problem, sorry if
I explained wrongly.

That part works perfect :
"match request path "/static/*" forward to <webhosts>"

I am trying to match a request based on the "static" path and set its
reponse headers.

This is the part where I want to improve things:
 
match request path "/static/*" response header set "Access-Control-
Allow-Headers" value "Range"

And those, I always get syntax errors.

Thanks
Kind regards.




prx
Reply | Threaded
Open this post in threaded view
|

Re: relayd to match http request according to path and change headers

prx
* Stephane Guedon <[hidden email]> le [04-04-2021 23:59:23 +0200]:

> Le dimanche 4 avril 2021 11:31:27 CEST, vous avez écrit :
> > Just a idea, have you tried the keyword request ?
> >
> > Something like
> >
> > match request path "/static/*" forward to <webhosts>
> >
> > Regards,
> >
> > Christoph
> >
>
> Actually, it's not at the forward stage that I have a problem, sorry if
> I explained wrongly.
>
> That part works perfect :
> "match request path "/static/*" forward to <webhosts>"
>
> I am trying to match a request based on the "static" path and set its
> reponse headers.
>
> This is the part where I want to improve things:
>  
> match request path "/static/*" response header set "Access-Control-
> Allow-Headers" value "Range"
>
> And those, I always get syntax errors.

I guess that's because you mix "request" and "response".
You can tag the request if you want :

```
match request path "/static/*" tag STATIC
match response tagged "STATIC" header set "Access-Control-Allow-Headers" value "Range"
```

Reply | Threaded
Open this post in threaded view
|

Re: relayd to match http request according to path and change headers

Stephane Guedon
Le lundi 5 avril 2021, 20:55:20 CEST prx a écrit :
> * Stephane Guedon <[hidden email]> le [04-04-2021
23:59:23 +0200]:

> > Le dimanche 4 avril 2021 11:31:27 CEST, vous avez écrit :
> > > Just a idea, have you tried the keyword request ?
> > >
> > > Something like
> > >
> > > match request path "/static/*" forward to <webhosts>
> > >
> > > Regards,
> > >
> > > Christoph
> >
> > Actually, it's not at the forward stage that I have a problem, sorry
> > if I explained wrongly.
> >
> > That part works perfect :
> > "match request path "/static/*" forward to <webhosts>"
> >
> > I am trying to match a request based on the "static" path and set
> > its
> > reponse headers.
> >
> > This is the part where I want to improve things:
> >
> > match request path "/static/*" response header set "Access-Control-
> > Allow-Headers" value "Range"
> >
> > And those, I always get syntax errors.
>
> I guess that's because you mix "request" and "response".
> You can tag the request if you want :
>
> ```
> match request path "/static/*" tag STATIC
> match response tagged "STATIC" header set
> "Access-Control-Allow-Headers" value "Range" ```

Actually, that idea might work.

It does not break anyway, so I will see if it works out...

Thanks.