On Wed, Nov 14, 2018 at 03:20:59AM -0700, Anthony J. Bentley wrote:
> Hi,
>
> I have httpd running two servers on two different ports:
>
> server "a" {
> listen on * port 8080
> root "/foo"
> }
>
> server "b" {
> listen on * port 8081
> root "/bar"
> }
>
> /var/www/foo/ contains foo.html, and /var/www/bar/ contains bar.html.
>
> I have relayd in front serving https, and redirecting requests to
> /foo.html and /bar.html to the appropriate port:
>
> table <web1> { 127.0.0.1 }
> table <web2> { 127.0.0.1 }
>
> http protocol myremote {
> return error
> pass
> match request path "/foo.html" forward to <web1>
> match request path "/bar.html" forward to <web2>
> }
>
> relay example.com {
> listen on example.com port 443 tls
> protocol myremote
>
> forward to <web1> check tcp port 8080
> forward to <web2> check tcp port 8081
> }
>
> If I use wget(1) to request foo.html and bar.html separately, it works:
>
>
> $ wget https://example.com/foo.html; wget https://example.com/bar.html
> --2018-11-14 03:16:21-- https://example.com/foo.html
> Resolving example.com (example.com)... 192.168.2.15
> Connecting to example.com (example.com)|192.168.2.15|:443... connected.
> HTTP request sent, awaiting response... 200 OK
> Length: 40 [text/html]
> Saving to: ‘foo.html’
>
> foo.html 100%[===================>] 40 201 B/s in 0.2s
>
>
> 2018-11-14 03:16:21 (201 B/s) - ‘foo.html’ saved [40/40]
>
> --2018-11-14 03:16:21-- https://example.com/bar.html
> Resolving example.com (example.com)... 192.168.2.15
> Connecting to example.com (example.com)|192.168.2.15|:443... connected.
> HTTP request sent, awaiting response... 200 OK
> Length: 40 [text/html]
> Saving to: ‘bar.html’
>
> bar.html 100%[===================>] 40 206 B/s in 0.2s
>
>
> 2018-11-14 03:16:22 (206 B/s) - ‘bar.html’ saved [40/40]
>
>
> However, if I make two requests from the same connection, relayd only
> forwards to the first host:
>
>
> $ wget https://example.com/foo.html https://example.com/bar.html
> --2018-11-14 03:18:14-- https://example.com/foo.html
> Resolving example.com (example.com)... 192.168.2.15
> Connecting to example.com (example.com)|192.168.2.15|:443... connected.
> HTTP request sent, awaiting response... 200 OK
> Length: 40 [text/html]
> Saving to: ‘foo.html’
>
> foo.html 100%[===================>] 40 --.-KB/s in 0s
>
>
> 2018-11-14 03:18:14 (4.24 MB/s) - ‘foo.html’ saved [40/40]
>
> --2018-11-14 03:18:14-- https://example.com/bar.html
> Reusing existing connection to example.com:443.
> HTTP request sent, awaiting response... 404 Not Found
> 2018-11-14 03:18:14 ERROR 404: Not Found.
>
> FINISHED --2018-11-14 03:18:14--
> Total wall clock time: 0.07s
> Downloaded: 1 files, 40 in 0s (4.24 MB/s)
>
Known bug, relayd does select the forwarding host only at connection time.
After that the connection is kept for all requests. So keep-alive sessions
will behave differently and route stuff wrong considering your ruleset.
You have to turn of keep-alive to make this work with relayd. Sorry.
--
:wq Claudio