Reverse proxy redirect to servers based on url root path

I am new to HAProxy and struggling to understand how things to configure.
I have found just one example for Grafana, though I am not able to expand this to other applications.

This is my setup:

I have a couple of docker containers running on a single host. The containers are attached to the same bridged network. The containers deliver services on different ports, e.g openhab on 8080, Grafana on 3000, NodeRed on 1880, and so non. These ports are not exposed through the bridge.

What I want to do is to run a haproxy container as a reverse proxy on the bridged network and expose just 80 to the host network.
The routing to the services should than happen based on the root URL path, e.g host/openhab for openhab, host/grafana for Grafana,…

this is my config:

global
  log stdout format raw local0
defaults
  log global
  mode http
  option httplog
  timeout client          30s
  timeout server          30s
  timeout connect         30s

frontend http-in
  bind *:80
  use_backend grafana_backend if { path /grafana } or { path_beg /grafana/ }
  use_backend nodered_backend if { path /nodered } or { path_beg /nodered/ }
  use_backend sbserver_backend if { path /sbserver } or { path_beg /sbserver/ }
  use_backend openhab_backend if { path /openhab } or { path_beg /openhab/ } 

backend grafana_backend
  mode http
  http-request set-path %[path,regsub(^/grafana/?,/)]
  server grafana grafana:3000

backend nodered_backend
  mode http
  http-request set-path %[path,regsub(^/nodered/?,/)]
server node-red node-red:1880

backend openhab_backend
  http-request set-path %[path,regsub(^/openhab/?,/)]
  server openhab openhab:8080

backend sbserver_backend
  mode http
  http-request set-path %[path,regsub(^/sbserver/?,/)]
  server sb-server sbserver:9000

The problem I have, for example for openhab_backend, is that the response from the server contains resources which when requested by the browser are not routed to the corresponding backend .
Here is an example log output for the openhab:

Proxy http-in stopped (cumulated conns: FE: 9, BE: 17).,
[NOTICE]   (1) : haproxy version is 2.5.0-f2e0833,
[NOTICE]   (1) : path to executable is /usr/local/sbin/haproxy,
[WARNING]  (1) : Exiting Master process...,
[WARNING]  (8) : Proxy http-in stopped (cumulated conns: FE: 9, BE: 17).,
[WARNING]  (1) : Current worker (8) exited with code 0 (Exit),
[WARNING]  (1) : All workers exited. Exiting... (0),
[NOTICE]   (1) : New worker (8) forked,
[NOTICE]   (1) : Loading success.,
192.168.3.55:62217 [12/Dec/2021:16:13:38.119] http-in openhab_backend/openhab 0/0/1/2/3 304 73 - - ---- 1/1/0/0/0 0/0 "GET /openhab/ HTTP/1.1",
192.168.3.55:62217 [12/Dec/2021:16:13:38.207] http-in http-in/<NOSRV> -1/-1/-1/-1/0 503 217 - - SC-- 1/1/0/0/0 0/0 "GET /css/app.css HTTP/1.1",
192.168.3.55:62217 [12/Dec/2021:16:13:38.208] http-in http-in/<NOSRV> -1/-1/-1/-1/0 503 217 - - SC-- 1/1/0/0/0 0/0 "GET /js/app.js HTTP/1.1",
192.168.3.55:62217 [12/Dec/2021:16:13:38.263] http-in http-in/<NOSRV> -1/-1/-1/-1/0 503 217 - - SC-- 1/1/0/0/0 0/0 "GET /res/icons/favicon.svg HTTP/1.1",
192.168.3.55:62217 [12/Dec/2021:16:13:38.266] http-in http-in/<NOSRV> -1/-1/-1/-1/0 503 217 - - SC-- 1/1/0/0/0 0/0 "GET /res/icons/128x128.png HTTP/1.1"

Is this problem solvable?

found the solution:
Defining virtual hosts (/etc/hosts).

global
  log stdout format raw local0
defaults
  log global
  mode http
  option httplog
  timeout client          30s
  timeout server          30s
  timeout connect         30s

frontend http-in
  bind *:80

  acl is_openhab hdr_sub(host) -i openhab
  use_backend openhab_backend if is_openhab 

  acl is_grafana hdr_sub(host) -i grafana
  use_backend grafana_backend if is_grafana 

  acl is_nodered hdr_sub(host) -i nodered
  use_backend nodered_backend if is_nodered 

  acl is_sbserver hdr_sub(host) -i sbserver
  use_backend sbserver_backend if is_sbserver 

  acl is_ccu hdr_sub(host) -i ccu
  use_backend ccu_backend if is_ccu 

  acl is_frontail hdr_sub(host) -i frontail
  use_backend frontail_backend if is_frontail 



backend grafana_backend
  server grafana grafana:3000

backend nodered_backend
  server node-red node-red:1880

backend openhab_backend
  server openhab openhab:8080

backend sbserver_backend
  server sb-server sbserver:9000

backend ccu_backend
  server ccu homematic-raspi 

backend frontail_backend
  server frontail frontail:9001
1 Like