Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    HAProxy timeouts for any subdomain

    Cache/Proxy
    3
    7
    2.4k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      turboturtle
      last edited by

      I'm attempting to use HAProxy to redirect multiple subdomains to different ports on the same server.

      I had initially been following this blog post, https://blog.briantruscott.com/how-to-serve-multiple-domains-from-a-single-public-ip-using-haproxy-on-pfsense/, but to no avail. I've tried a shared frontend with 2 servers, a shared with only 1 server to test, and a non-shared frontend for just the one server. In all cases I get the same behavior - going to 'webserver.example.net' hangs until the browser errors out with a timeout and going to just 'example.net' as a test returns a 503.

      Here is the config from the most recent attempt:

      Automaticaly generated, dont edit manually.

      Generated on: 2018-01-09 20:05

      global
      maxconn 1000
      stats socket /tmp/haproxy.socket level admin
      gid 80
      nbproc 1
      chroot /tmp/haproxy_chroot
      daemon
      tune.ssl.default-dh-param 2048
      server-state-file /tmp/haproxy_server_state

      listen HAProxyLocalStats
      bind 127.0.0.1:2200 name localstats
      mode http
      stats enable
      stats admin if TRUE
      stats uri /haproxy/haproxy_stats.php?haproxystats=1
      timeout client 5000
      timeout connect 5000
      timeout server 5000

      frontend shared-merged
      bind <wan_ip>:80 name <wan_ip>:80 
      mode http
      log global
      option http-keep-alive
      option forwardfor
      acl https ssl_fc
      http-request set-header X-Forwarded-Proto http if !https
      http-request set-header X-Forwarded-Proto https if https
      timeout client 30000
      acl web hdr(host) -i webserver.example.net
      use_backend webserver_http_ipv4  if  web

      backend webserver_http_ipv4
      mode http
      log global
      stats enable
      stats uri /haproxy?stats
      stats realm haproxystats
      stats auth admin: <password>timeout connect 30000
      timeout server 30000
      retries 3
      source ipv4@ usesrc clientip
      server webserver 192.168.6.100:9001 ssl  verify none</password></wan_ip></wan_ip>

      WAN firewall rule allows port 80 traffic to the router. I'm running DNS Resolver and there is a host override for webserver.example.net for 192.168.6.100 as well as an alias for 'webserver' to both 'webserver.example.net' and the IP address.

      Any help would be very much appreciated, as I'm sure this is going to turn out to me doing something rather dumb.

      1 Reply Last reply Reply Quote 0
      • P
        PiBa
        last edited by

        'example.net' is not send to a backend.. as the acl selects specifically on the webserver.example.net domainname.. Perhaps you should change that criteria? Or use a 'defaultbackend' ?

        Also if testing from internally try without the 'transparent client ip' option on the backend as that is a 'usual suspect' for causing local connections to fail..

        b.t.w. the 9001 port is using ssl / https ? does this locally work?: 'curl -k https://192.168.6.100:9001/'  (might need to disable transparentclientip feature before testing that..)

        1 Reply Last reply Reply Quote 0
        • snitemS
          snitem
          last edited by

          Yesterday I had a weird bug, I always got error 503 but then I went to the backend and activated the Transparent ClientIP option, saved, applied changes, deactivated the Transparent ClientIP option again, saved, applied changes. Then it was working. Had to do this for every single backend. Not sure where this bug came from, maybe because I restored my HAproxy settings from a backup file.

          Also you should disable health checks for testing (I think you already did).

          1 Reply Last reply Reply Quote 0
          • T
            turboturtle
            last edited by

            @PiBa:

            'example.net' is not send to a backend.. as the acl selects specifically on the webserver.example.net domainname.. Perhaps you should change that criteria? Or use a 'defaultbackend' ?

            Yeah, the plain 'example.net' was just to see if HAProxy was catching anything at all, which I believe the 503 shows it is? Anyways, added the default backend for webserver.example.net and still the same timeout.

            Also if testing from internally try without the 'transparent client ip' option on the backend as that is a 'usual suspect' for causing local connections to fail..

            b.t.w. the 9001 port is using ssl / https ? does this locally work?: 'curl -k https://192.168.6.100:9001/'  (might need to disable transparentclientip feature before testing that..)

            Tried without transparent client IP, same result. Yes, 9001 is using ssl and 'curl -k https://192.168.6.100:9001' works locally.

            Yesterday I had a weird bug, I always got error 503 but then I went to the backend and activated the Transparent ClientIP option, saved, applied changes, deactivated the Transparent ClientIP option again, saved, applied changes. Then it was working. Had to do this for every single backend. Not sure where this bug came from, maybe because I restored my HAproxy settings from a backup file.

            Gave it a shot, same issue.  :-\

            1 Reply Last reply Reply Quote 0
            • P
              PiBa
              last edited by

              Yes a 503 would be returned by haproxy when no backend is 'available'. It confirms that the browser is talking with haproxy.

              If you enable health checks on the backend, does the stats page show the servers as 'up' ?

              1 Reply Last reply Reply Quote 0
              • T
                turboturtle
                last edited by

                @PiBa:

                Yes a 503 would be returned by haproxy when no backend is 'available'. It confirms that the browser is talking with haproxy.

                If you enable health checks on the backend, does the stats page show the servers as 'up' ?

                Yes, shows as up. Not sure if this is indicative of anything, but while the shared frontend shows up on stats and shows bytes in/out, the webserver frontend attached to that shared frontend does not appear on the stats page.

                1 Reply Last reply Reply Quote 0
                • P
                  PiBa
                  last edited by

                  In case of 'shared frontends' only 1 frontend is written to the config, and the configuration settings are 'combined' so that might be ok.

                  The webserver server line does also count bytes in/out ?

                  What if you run a 'curl http://webserver.example.net/' request to the haproxy frontend.? Does that timeout as well? Or does it perhaps redirect to a https://wanip:443/ while haproxy is listening on :80 or perhaps a redirect to https://url:9001 ? In which case the timeout would make sense as those ports are likely not open..

                  What do haproxy logs tell for the request? Either send them to a syslog server elsewhere on the network, or to the local log socket so it will show in status\packagelogs.

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post
                  Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.