Hi all,

I'm trying to relay an http connection to differents destination based
on url filtering. It works great but since url used for filtering are on
the same domain, browser tends to use a persistent connection:
"Connection: keep-alive".

Relayd seems to keep using the first match destination even when
http request match the second one.

Here is my relayd configuration:

table <srv1> { 127.0.0.1 }
table <srv2> { 127.0.0.1 }

http protocol "httpfilter" {
        return error
                match url "www.example.org/" forward to <srv1>
                match url "www.example.org/api/" forward to <srv2>
}

relay www {
        listen on 127.0.0.1 port 80
                protocol httpfilter

                forward to <srv1> port 8080 check tcp
                forward to <srv2> port 8181 check tcp
}

Here is how I test with persistent connection:

curl http://www.example.org http://www.example.org/api/

and here is the log I get:

relay www, session 1 (1 active), 0, 127.0.0.1 -> 127.0.0.1:8080, done, GET GET


Giving a look at relayd source code I suppose that this scenario is
known. In relay_http.c, int relay_match_actions(); relayd is changing
the destination table with the one from the matched rule.

Am I doing something wrong ? something not supported ?

I'm more than willing to help on this.

Regards,

-- 
Paul Fariello

Reply via email to