0

I need to configure Haproxy for local testing.

The goal is to have 3 services

  1. haproxy in docker container
  2. listening http app on device's (macOS) localhost
  3. a client app sending request through haproxy to the listening app (number 2.)

docker-compose.yml configuration for the proxy is

proxy_server:
  image: haproxy:2.7.0-alpine
  container_name: proxy_server
  user: root # I used this to install curl in the container
  ports:
    - '3128:80' # haproxy itself
    - '20005:20005' # configured proxy in haproxy.cfg
  restart: always
  volumes:
    - ./test/proxy_server/config:/usr/local/etc/haproxy # this maps the haproxy.cfg file into the container
  extra_hosts:
    - 'host.docker.internal:host-gateway' # allows the proxy to access device's localhost on linux

haproxy.cfg is

defaults
  timeout client 5s
  timeout connect 5s
  timeout server 5s
  timeout http-request 5s

listen reverse-proxy
  bind *:20005
  mode http
  option httplog
  log stdout format raw local0 debug

When the listening app (2.) listens on localhost:56454, I can connect into the haproxy container, install curl and connect to the listening app via host.docker.internal host.

/ # curl -v -I http://host.docker.internal:56454
*   Trying 192.168.65.2:56454...
* Connected to host.docker.internal (192.168.65.2) port 56454 (#0)
> HEAD / HTTP/1.1
> Host: host.docker.internal:56454
> User-Agent: curl/7.86.0
> Accept: */*

This is correct.

The problem is that I am not able to send request through the proxy to the same URL (http://host.docker.internal:56454) because the proxy logs

172.22.0.1:56636 [10/Dec/2022:13:50:22.601] reverse-proxy reverse-proxy/<NOSRV> 0/-1/-1/-1/0 503 217 - - SC-- 1/1/0/0/0 0/0 "POST http://host.docker.internal:56454/confirmation HTTP/1.1"

and the client gets following response:

HTTP Status 503: <html><body><h1>503 Service Unavailable</h1>\nNo server is available to handle this request.\n</body></html>

Also, the request passes correctly when I use the following docker-compose.yml configuration with ubuntu/squid image instead of the haproxy one

proxy_server:
  image: ubuntu/squid
  container_name: proxy_server
  ports:
    - '3128:3128'
  restart: always
  extra_hosts:
    - 'host.docker.internal:host-gateway' # allows the proxy to access device's localhost on linux

So, I guess the problem is that haproxy somehow does not see the service on http://host.docker.internal:56454 even though the service is accessible from the container.

I've also tried ubuntu and debian versions of the haproxy image and it still does not work correctly.

Any idea how to fix it?

Edit:

Investigating <NOSRV>... No clue how to fix it yet.

dom
  • 414
  • 3
  • 12

0 Answers0