tcp:
  routers:
    tcp.admin-router:
      entryPoints:
        - webadmin
      rule: "HostSNI(`*`)" # Plain TCP (No TLS)   или HostSNI(`://domain.com`)
      service: paits.webadmin-service
  services:
    paits.webadmin-service:
      loadBalancer:
        servers:
          - address: "192.168.1.10:8888"
http:
  routers:
    tls.traefik-router:
      entryPoints:
        - websecure
      rule: Host(`traefik.paits.ru`)
      tls:
        certResolver: "letsEncrypt"
      middlewares: auth
      service: api@internal
    tls.goaccess-router:
      entryPoints:
        - websecure
      rule: Host(`goaccess.paits.ru`)
      tls:
        certResolver: "letsEncrypt"
      middlewares: goaccess.statiq
      service: noop@internal #goaccess.server-service
    tls.whoami-router:
      entryPoints:
        - websecure
      rule: Host(`whoami.paits.ru`)
      tls:
        certResolver: "letsEncrypt"
      middlewares: auth
      service: whoami.server-service
    tls-router:
      entryPoints:
        - websecure
      rule: Host(`{{ env "DMN_01"}}`) || Host(`{{ env "DMN_02"}}`) || Host(`{{ env "DMN_03"}}`) || Host(`{{ env "DMN_04"}}`) || Host(`{{ env "DMN_05"}}`) || Host(`{{ env "DMN_06"}}`) || Host(`{{ env "DMN_07"}}`) || Host(`{{ env "DMN_08"}}`) || Host(`{{ env "DMN_09"}}`) || Host(`{{ env "DMN_10"}}`) || Host(`{{ env "DMN_11"}}`) || Host(`{{ env "DMN_12"}}`) || Host(`{{ env "DMN_13"}}`) || Host(`{{ env "DMN_14"}}`) || Host(`{{ env "DMN_15"}}`) || Host(`{{ env "DMN_16"}}`) || Host(`{{ env "DMN_17"}}`) || Host(`{{ env "DMN_18"}}`) || Host(`{{ env "DMN_19"}}`) || Host(`{{ env "DMN_20"}}`) || Host(`{{ env "DMN_21"}}`) || Host(`{{ env "DMN_22"}}`) || Host(`{{ env "DMN_23"}}`) || Host(`{{ env "DMN_24"}}`) || Host(`{{ env "DMN_25"}}`) || Host(`{{ env "DMN_26"}}`) || Host(`{{ env "DMN_27"}}`) || Host(`{{ env "DMN_28"}}`) || Host(`{{ env "DMN_29"}}`) || Host(`{{ env "DMN_30"}}`) || Host(`{{ env "DMN_31"}}`) || Host(`{{ env "DMN_32"}}`) || Host(`{{ env "DMN_33"}}`) || Host(`{{ env "DMN_34"}}`) || Host(`{{ env "DMN_35"}}`) || Host(`{{ env "DMN_36"}}`) || Host(`{{ env "DMN_37"}}`) || Host(`{{ env "DMN_38"}}`) || Host(`{{ env "DMN_39"}}`) || Host(`{{ env "DMN_40"}}`) || Host(`{{ env "DMN_41"}}`) || Host(`{{ env "DMN_42"}}`) || Host(`{{ env "DMN_43"}}`) || Host(`{{ env "DMN_44"}}`) || Host(`{{ env "DMN_45"}}`) || Host(`{{ env "DMN_46"}}`) || Host(`{{ env "DMN_47"}}`) || Host(`{{ env "DMN_48"}}`) || Host(`{{ env "DMN_49"}}`) || Host(`{{ env "DMN_50"}}`) || Host(`{{ env "DMN_51"}}`) || Host(`{{ env "DMN_52"}}`) || Host(`{{ env "DMN_53"}}`) || Host(`{{ env "DMN_54"}}`) || Host(`{{ env "DMN_55"}}`) || Host(`{{ env "DMN_56"}}`) || Host(`{{ env "DMN_57"}}`) || Host(`{{ env "DMN_58"}}`) || Host(`{{ env "DMN_59"}}`) || Host(`{{ env "DMN_60"}}`) || Host(`{{ env "DMN_61"}}`) || Host(`{{ env "DMN_62"}}`) || Host(`{{ env "DMN_63"}}`) || Host(`{{ env "DMN_64"}}`) || Host(`{{ env "DMN_65"}}`) || Host(`{{ env "DMN_66"}}`) || Host(`{{ env "DMN_67"}}`) || Host(`{{ env "DMN_68"}}`) || Host(`{{ env "DMN_69"}}`) #|| Host(`{{ env "DOMAIN_70"}}`) || Host(`{{ env "DOMAIN_71"}}`) || Host(`{{ env "DOMAIN_72"}}`) || Host(`{{ env "DOMAIN_73"}}`) || Host(`{{ env "DOMAIN_74"}}`) || Host(`{{ env "DOMAIN_75"}}`) || Host(`{{ env "DOMAIN_76"}}`) || Host(`{{ env "DOMAIN_77"}}`) || Host(`{{ env "DOMAIN_78"}}`) || Host(`{{ env "DOMAIN_79"}}`)
      #rule: Host(`paits.ru`)
      tls:
        certResolver: "letsEncrypt"
      middlewares: fix-headers
      service: paits.webserver-service
    tls.www-router:
      entryPoints:
        - websecure
      rule: Host(`www.{{ env "DMN_01"}}`) || Host(`www.{{ env "DMN_02"}}`) || Host(`www.{{ env "DMN_03"}}`) || Host(`www.{{ env "DMN_04"}}`) || Host(`www.{{ env "DMN_05"}}`) || Host(`www.{{ env "DMN_06"}}`) || Host(`www.{{ env "DMN_07"}}`) || Host(`www.{{ env "DMN_08"}}`) || Host(`www.{{ env "DMN_09"}}`) || Host(`www.{{ env "DMN_10"}}`) || Host(`www.{{ env "DMN_11"}}`) || Host(`www.{{ env "DMN_12"}}`) || Host(`www.{{ env "DMN_13"}}`) || Host(`www.{{ env "DMN_14"}}`) || Host(`www.{{ env "DMN_15"}}`) || Host(`www.{{ env "DMN_16"}}`) || Host(`www.{{ env "DMN_17"}}`) || Host(`www.{{ env "DMN_18"}}`) || Host(`www.{{ env "DMN_19"}}`) || Host(`www.{{ env "DMN_20"}}`) || Host(`www.{{ env "DMN_21"}}`) || Host(`www.{{ env "DMN_22"}}`) || Host(`www.{{ env "DMN_23"}}`) || Host(`www.{{ env "DMN_24"}}`) || Host(`www.{{ env "DMN_25"}}`) || Host(`www.{{ env "DMN_26"}}`) || Host(`www.{{ env "DMN_27"}}`) || Host(`www.{{ env "DMN_28"}}`) || Host(`www.{{ env "DMN_29"}}`) || Host(`www.{{ env "DMN_30"}}`) || Host(`www.{{ env "DMN_31"}}`) || Host(`www.{{ env "DMN_32"}}`) || Host(`www.{{ env "DMN_33"}}`) || Host(`www.{{ env "DMN_34"}}`) || Host(`www.{{ env "DMN_35"}}`) || Host(`www.{{ env "DMN_36"}}`) || Host(`www.{{ env "DMN_37"}}`) || Host(`www.{{ env "DMN_38"}}`) || Host(`www.{{ env "DMN_39"}}`) || Host(`www.{{ env "DMN_40"}}`) || Host(`www.{{ env "DMN_41"}}`) || Host(`www.{{ env "DMN_42"}}`) || Host(`www.{{ env "DMN_43"}}`) || Host(`www.{{ env "DMN_44"}}`) || Host(`www.{{ env "DMN_45"}}`) || Host(`www.{{ env "DMN_46"}}`) || Host(`www.{{ env "DMN_47"}}`) || Host(`www.{{ env "DMN_48"}}`) || Host(`www.{{ env "DMN_49"}}`) || Host(`www.{{ env "DMN_50"}}`) || Host(`www.{{ env "DMN_51"}}`) || Host(`www.{{ env "DMN_52"}}`) || Host(`www.{{ env "DMN_53"}}`) || Host(`www.{{ env "DMN_54"}}`) || Host(`www.{{ env "DMN_55"}}`) || Host(`www.{{ env "DMN_56"}}`) || Host(`www.{{ env "DMN_57"}}`) || Host(`www.{{ env "DMN_58"}}`) || Host(`www.{{ env "DMN_59"}}`) || Host(`www.{{ env "DMN_60"}}`) #|| Host(`www.{{ env "DMN_61"}}`) || Host(`{{ env "DMN_62"}}`) || Host(`{{ env "DMN_63"}}`) || Host(`{{ env "DMN_64"}}`) || Host(`{{ env "DMN_65"}}`) || Host(`{{ env "DMN_66"}}`) || Host(`{{ env "DMN_67"}}`) || Host(`{{ env "DMN_68"}}`) || Host(`{{ env "DMN_69"}}`) #|| Host(`{{ env "DOMAIN_70"}}`) || Host(`{{ env "DOMAIN_71"}}`) || Host(`{{ env "DOMAIN_72"}}`) || Host(`{{ env "DOMAIN_73"}}`) || Host(`{{ env "DOMAIN_74"}}`) || Host(`{{ env "DOMAIN_75"}}`) || Host(`{{ env "DOMAIN_76"}}`) || Host(`{{ env "DOMAIN_77"}}`) || Host(`{{ env "DOMAIN_78"}}`) || Host(`{{ env "DOMAIN_79"}}`)
      #rule: Host(`www.paits.ru`)
      tls:
        certResolver: "letsEncrypt"
      middlewares: fix-headers
      service: paits.webserver-service
  middlewares:
    auth:
      basicAuth:
        users:
          - "admin:$apr1$xQSo31FB$0/3qNqkSPpuq4rtByX8Tv/"
    fix-headers:
      headers:
        customRequestHeaders:
          X-Forwarded-Proto: "https"              # msg бэкенду, использовался HTTPS
          #X-Forwarded-Host: "traefik.paits.ru"   # Явно передаём Host
          #X-Real-IP: "$proxy_add_x_forwarded_for" # Передаём реальный IP
    goaccess.statiq:
      plugin:
        statiq:
          root: "./etc/traefik"
          index-files:
            - "report.html"
          enableDirectoryListing: true
          spaMode: false
          cache-control:
            ".html": "max-age=3600"
            ".css": "max-age=86400"
            ".js": "max-age=86400"
            ".png": "max-age=604800"
            ".jpg": "max-age=604800"
            "*": "max-age=3600"
  services:
    paits.webserver-service:
      loadBalancer:
        servers:
          - url: "http://192.168.1.10:80"
        passHostHeader: true # Передаём исходный Host
    whoami.server-service:
      loadBalancer:
        servers:
          - url: "http://172.18.0.2:88"
    goaccess.server-service:
      loadBalancer:
        servers:
          - url: "ws://localhost:7890"
tls:
  options:
    default:
      sniStrict: true
      minVersion: VersionTLS12
      alpnProtocols:
        - "http/1.1"
