From 2aece2e1829ae67bc89a7dfe0f7d74f7c281d9b4 Mon Sep 17 00:00:00 2001 From: goeranh Date: Sat, 28 Feb 2026 15:42:19 +0100 Subject: [PATCH] haproxy config formatting --- hosts/proxy/default.nix | 178 ++++++++++++++++++++-------------------- 1 file changed, 90 insertions(+), 88 deletions(-) diff --git a/hosts/proxy/default.nix b/hosts/proxy/default.nix index b4ab877..e69bdd3 100644 --- a/hosts/proxy/default.nix +++ b/hosts/proxy/default.nix @@ -191,110 +191,112 @@ haproxy = { enable = true; config = '' - global - # schreibe globalen log ins journal ip -> app - log /dev/log format raw local0 - maxconn 50000 - # man könnte metriken über einen socket file statt einen lokalen port machen für user permission control - # stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners - tune.bufsize 32762 + global + # schreibe globalen log ins journal ip -> app + log /dev/log format raw local0 + maxconn 50000 + # man könnte metriken über einen socket file statt einen lokalen port machen für user permission control + # stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners + tune.bufsize 32762 - defaults - log global - mode tcp - option tcplog - timeout connect 5s - timeout client 30s - timeout server 30s + defaults + log global + mode tcp + option tcplog + timeout connect 5s + timeout client 30s + timeout server 30s # stats seite zeigt backend connection status, wenn check gesetzt ist - frontend stats - bind 127.0.0.1:8404 - mode http - stats enable - stats uri /stats - stats refresh 10s - stats show-legends - stats show-node - stats show-modules + frontend stats + bind 127.0.0.1:8404 + mode http + stats enable + stats uri /stats + stats refresh 10s + stats show-legends + stats show-node + stats show-modules - frontend http-in - bind *:80 + frontend http-in + bind *:80 - # hier wird eine regel pro domain aus der forwarder liste generiert - ${lib.foldlAttrs ( - prev: name: value: - prev + "acl is_${name} hdr(host) -i ${value.domain}\n" - ) "" forwards} + # hier wird eine regel pro domain aus der forwarder liste generiert + ${lib.foldlAttrs ( + prev: name: value: + prev + '' + acl is_${name} hdr(host) -i ${value.domain} + '' + ) "" forwards} - # ist request eine acme challenge? - acl is_acme path_beg /.well-known/acme-challenge/ + # ist request eine acme challenge? + acl is_acme path_beg /.well-known/acme-challenge/ - # pro domain wird ein backend festgelegt und auf https redirected wenn es keine acme request ist - ${lib.foldlAttrs ( - prev: name: value: - prev - + '' - use_backend ${name}_80 if is_${name} - http-request redirect scheme https code 301 if !is_acme is_${name} - '' - ) "" forwards} + # pro domain wird ein backend festgelegt und auf https redirected wenn es keine acme request ist + ${lib.foldlAttrs ( + prev: name: value: + prev + + '' + use_backend ${name}_80 if is_${name} + http-request redirect scheme https code 301 if !is_acme is_${name} + '' + ) "" forwards} - # das default backend zeigt die liste aller redirects an - # die liste darf nicht auf 443 redirected werden, da cert fehlt - default_backend default_backend + # das default backend zeigt die liste aller redirects an + # die liste darf nicht auf 443 redirected werden, da cert fehlt + default_backend default_backend - # ssh redirect srs2 - frontend ssh_jump_alt - bind *:2142 - mode tcp - # gönn mal session timeout - timeout client 30m - log-format "%ci:%cp [%t] %ft %b/%s %Tw/%Tc/%Tt %B %ts %ac/%fc/%bc/%sc/%rc %sq/%bq dst:%[var(sess.dst)] " - use_backend ssh_srs2 + # ssh redirect srs2 + frontend ssh_jump_alt + bind *:2142 + mode tcp + # gönn mal session timeout + timeout client 30m + log-format "%ci:%cp [%t] %ft %b/%s %Tw/%Tc/%Tt %B %ts %ac/%fc/%bc/%sc/%rc %sq/%bq dst:%[var(sess.dst)] " + use_backend ssh_srs2 - # ---- SNI routing (TCP, peek at handshake) ---- - frontend sni_router - bind *:443 - mode tcp - # mehrere pakete puffern und connection beenden wenn es kein ssl handshake sieht - tcp-request inspect-delay 1s - tcp-request content accept if { req_ssl_hello_type 1 } + # ---- SNI routing (TCP, peek at handshake) ---- + frontend sni_router + bind *:443 + mode tcp + # mehrere pakete puffern und connection beenden wenn es kein ssl handshake sieht + tcp-request inspect-delay 1s + tcp-request content accept if { req_ssl_hello_type 1 } - # tcp redirect der anwendung basierend auf ssl_sni handshake parameter - ${lib.foldlAttrs ( - prev: name: value: - prev + "use_backend ${name}_443 if { req_ssl_sni -i ${value.domain} }\n" - ) "" forwards} + # tcp redirect der anwendung basierend auf ssl_sni handshake parameter + ${lib.foldlAttrs ( + prev: name: value: + prev + "use_backend ${name}_443 if { req_ssl_sni -i ${value.domain} }\n" + ) "" forwards} - # default backend http static file generated above - backend default_backend - mode http - http-request return status 200 content-type "text/html" file ${indexPage} + # default backend http static file generated above + backend default_backend + mode http + http-request return status 200 content-type "text/html" file ${indexPage} - # ssh srs2 backend - backend ssh_srs2 - mode tcp - timeout server 30m - timeout connect 10s - option tcpka - server srs2 141.56.51.2:80 check + # ssh srs2 backend + backend ssh_srs2 + mode tcp + timeout server 30m + timeout connect 10s + option tcpka + server srs2 141.56.51.2:80 check - # ein backend pro forwards eintrag für port 80 und 443 - ${lib.foldlAttrs ( - prev: name: value: - prev - + '' + # ein backend pro forwards eintrag für port 80 und 443 + ${lib.foldlAttrs ( + prev: name: value: + prev + + '' - backend ${name}_80 - mode http - server ${name} ${value.dest}:${builtins.toString value.httpPort} - backend ${name}_443 - mode tcp - server ${name} ${value.dest}:${builtins.toString value.httpsPort} check + backend ${name}_80 + mode http + server ${name} ${value.dest}:${builtins.toString value.httpPort} + backend ${name}_443 + mode tcp + server ${name} ${value.dest}:${builtins.toString value.httpsPort} check - '' - ) "" forwards} + '' + ) "" forwards} ''; }; };