haproxy-config 0.4.1

Parse HAProxy configs and easily query it
Documentation
#global configuration
global
	# optional: extensively log incoming requests
	# logs end up where /etc/rsyslog.d/haproxy.conf decides
	# right now thats in /var/log/haproxy.log
	# also enable the lines in default
	log /dev/log local0 notice

	# drop back from root asap
	user haproxy
	group haproxy
	# limit the number of processes and threads
	# since we run on limited hw
	nbproc 1
	nbthread 1
	# limit connections (due to hw)
	maxconn 200


defaults
	# optional loggin
	log global
	option httplog

	# timeouts
    timeout client 30s
    timeout connect 4s
    timeout server 30s
    # timeouts to limit ddos capabilities
    timeout http-request 10s
    timeout http-keep-alive 2s
    timeout queue 5s
    timeout tunnel 2m
    timeout client-fin 1s
    timeout server-fin 1s


frontend stats
	mode http
	bind *:9999
	stats enable
	stats uri /stats
	stats refresh 1s
	
	# stats admin false
	stats auth admin:pass

	# stats page only accessible from two ips
	acl network_allowed src 192.168.1.46 LOCALHOST
	http-request deny if !network_allowed


frontend matrix
	mode http
	bind *:8448 ssl crt /etc/ssl/certs/domain.dev.pem
	acl url_matrix path_beg /_matrix
	use_backend matrix if url_matrix


frontend http
	mode http
	bind *:80 # only used for letsencryt backend

	# redirect if using http, except if meant for letsencrypt
	# backend. code 301 (permanent redirect) as we only host https
	acl url_letsencrypt path_beg /.well-known/acme-challenge/
	http-request redirect scheme https code 301 unless url_letsencrypt
	use_backend letsencrypt

frontend https
	mode http
	bind *:443 ssl crt /etc/ssl/certs/domain.dev.pem

	# req.hdr(host) gets the url, change to lowercase then
	# send request to a backend following the map
	# note that no spaces are allowed here
	use_backend %[base,lower,map_beg(/etc/haproxy/hosts.map)]


backend letsencrypt # no need to check health
	mode http
	server certbot 127.0.0.1:42

backend server_a # no need to check health
	mode http
	server webserver 127.0.0.1:43 check

backend server_b
	mode http
	server conduit 127.0.0.1:44 check

backend server_c
	mode http
	server microbin 127.0.0.1:45 check

backend server_d
    mode http
    server home_automation 127.0.0.1:46 check

backend server_e
    mode http
    server  data_splitter 127.0.0.1:47 check

backend server_f
    mode http
    server data_server 127.0.0.1:48 check

backend server_g
    mode http
    server data_server_dev 127.0.0.1:49 check