Reverse proxy
Responsibilities
Section titled “Responsibilities”- Provide HTTP(S) ingress for LEF-hosted services (hostname-based routing).
- Enforce audience boundaries (public vs internal) at the routing layer.
- Provide a stable “front door” so backends can move without changing public entry points.
Not in scope (where the facts live)
Section titled “Not in scope (where the facts live)”- Host inventories / IPs / login profiles: see
web.core.lefand Servers. - Authoritative service entry points: see Services.
- Procedures and troubleshooting: see Proxy & routing and Infra troubleshooting.
Related models and rationale
Section titled “Related models and rationale”- DNS and reachability model: DNS
- TLS trust and certificate lifecycle: TLS & certificates
- Lane model (deployment-by-lane): Delivery aspect
NGINX ingress rationale
Section titled “NGINX ingress rationale”See NGINX ingress (public vs internal) for the operational procedure and test checklist.
Constraints & notes
Section titled “Constraints & notes”- Public unknown HTTPS cannot be redirected safely. Without a matching certificate, the TLS handshake can’t complete; the public defaults use
ssl_reject_handshake on;to prevent “default vhost” leakage. - Internal unknown HTTPS redirects still need a certificate. The internal default
:443uses an internal cert so it can return a redirect. For a clean browser UX, the cert should cover the internal zones you expect (SANs / wildcards). - A wildcard does not cover the zone apex.
*.docs.lefdoes not matchdocs.lef, sodocs.lefneeds its own vhost and certificate SAN. - Known-domain checks must not cross public/internal boundaries. This design keys the map by
"$server_addr:$host"so internal-only names don’t get redirected on public VIP listeners. - If you issue internal CA certs via HTTP-01 (webroot), keep the ACME challenge location on the internal
192.168.20.2:80default server too. - Avoid variable-based
ssl_certificate_keyfor root-only keys. Whenssl_certificate/ssl_certificate_keyuse variables, NGINX resolves and loads files at handshake time in worker processes, which commonly triggersPermission deniedif your private keys areroot:rootand not readable by the worker user.