[{"data":1,"prerenderedAt":154},["ShallowReactive",2],{"navigation_docs":3,"landing":66},[4,14,27,44,57],{"title":5,"path":6,"stem":7,"children":8,"page":13},"Community","\u002Fdocs\u002Fcommunity","docs\u002Fcommunity",[9],{"title":10,"path":11,"stem":12},"Contributing","\u002Fdocs\u002Fcommunity\u002Fcontributing","docs\u002Fcommunity\u002Fcontributing",false,{"title":15,"path":16,"stem":17,"children":18,"page":13},"Configuration","\u002Fdocs\u002Fconfiguration","docs\u002Fconfiguration",[19,23],{"title":20,"path":21,"stem":22},"Environment Variables","\u002Fdocs\u002Fconfiguration\u002Fenvironment-variables","docs\u002Fconfiguration\u002F1.environment-variables",{"title":24,"path":25,"stem":26},"Routing Rules","\u002Fdocs\u002Fconfiguration\u002Frouting-rules","docs\u002Fconfiguration\u002F2.routing-rules",{"title":28,"path":29,"stem":30,"children":31,"page":13},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started",[32,36,40],{"title":33,"path":34,"stem":35},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002Fgetting-started\u002F1.introduction",{"title":37,"path":38,"stem":39},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002Fgetting-started\u002F2.installation",{"title":41,"path":42,"stem":43},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002Fgetting-started\u002F3.quick-start",{"title":45,"path":46,"stem":47,"children":48,"page":13},"Guides","\u002Fdocs\u002Fguides","docs\u002Fguides",[49,53],{"title":50,"path":51,"stem":52},"Traefik Integration","\u002Fdocs\u002Fguides\u002Ftraefik","docs\u002Fguides\u002F1.traefik",{"title":54,"path":55,"stem":56},"Health Checks","\u002Fdocs\u002Fguides\u002Fhealth-checks","docs\u002Fguides\u002F2.health-checks",{"title":58,"path":59,"stem":60,"children":61,"page":13},"Reference","\u002Fdocs\u002Freference","docs\u002Freference",[62],{"title":63,"path":64,"stem":65},"How It Works","\u002Fdocs\u002Freference\u002Fhow-it-works","docs\u002Freference\u002F1.how-it-works",{"id":67,"title":68,"body":69,"description":68,"extension":145,"meta":146,"navigation":147,"path":148,"seo":149,"stem":152,"__hash__":153},"landing\u002Findex.md","",{"type":70,"value":71,"toc":142},"minimark",[72,103],[73,74,75,79,87],"u-page-hero",{},[76,77,78],"template",{"v-slot:title":68},"Route TLS traffic by hostname — without decrypting.",[76,80,81,82,86],{"v-slot:description":68},"SNI Router is a lightweight, HAProxy-based TLS\u002FSNI passthrough router. It reads the SNI hostname from the TLS ClientHello and forwards the raw TCP stream to the matching backend — ",[83,84,85],"strong",{},"zero decryption, zero certificate management",". Configured entirely via environment variables.",[76,88,89,96],{"v-slot:links":68},[90,91,95],"u-button",{"color":92,"size":93,"to":34,"trailing-icon":94},"neutral","xl","i-lucide-arrow-right","Get Started",[90,97,102],{"color":92,"size":93,"to":98,"icon":99,"target":100,"variant":101},"https:\u002F\u002Fgithub.com\u002Fcircle-rd\u002Fsni-router","i-simple-icons-github","_blank","outline","Star on GitHub",[104,105,106,109],"u-page-section",{},[76,107,108],{"v-slot:title":68},"Why SNI Router?",[76,110,111,117,122,127,132,137],{"v-slot:features":68},[112,113],"u-page-feature",{"description":114,"icon":115,"title":116},"Reads only the TLS ClientHello SNI field. The byte stream is forwarded untouched — backends manage their own certificates.","i-lucide-lock","TLS passthrough",[112,118],{"description":119,"icon":120,"title":121},"Route traffic from a single public IP to multiple backends by hostname. Wildcard rules (*.example.com) are supported.","i-lucide-network","Multi-backend routing",[112,123],{"description":124,"icon":125,"title":126},"No config file to maintain. All routes and options are set via environment variables or a Docker Compose block scalar.","i-lucide-settings-2","Environment-only config",[112,128],{"description":129,"icon":130,"title":131},"Exact hostnames always win over wildcards, regardless of declaration order. The HAProxy config is generated and validated at startup.","i-lucide-shield-check","Automatic priority sorting",[112,133],{"description":134,"icon":135,"title":136},"Route plain TCP connections by listen port and HTTP traffic with optional Let's Encrypt http-01 challenge forwarding.","i-lucide-cable","TCP + HTTP routing",[112,138],{"description":139,"icon":140,"title":141},"Optionally prepend PROXY protocol v2 headers so backends recover the real client IP instead of the router address.","i-lucide-radio","PROXY protocol v2",{"title":68,"searchDepth":143,"depth":143,"links":144},2,[],"md",{},true,"\u002F",{"title":150,"description":151},"SNI Router — TLS\u002FSNI passthrough router","TLS\u002FSNI passthrough router built on HAProxy — route HTTPS traffic by hostname without decrypting.","index","0SAbbWLU5bIQF6pp_5JPr0oUWvU052ISClVhbsee61M",1775987327190]