package main import ( "fmt" "log" "net" "net/http" "net/http/httputil" "net/url" "os" "strings" "time" ) const page = `Proxy Edge
Proxy Edge

Private edge transport

This endpoint provides resilient transport and availability services for authorized clients.

` func requestHostname(hostport string) string { host := strings.TrimSpace(hostport) if parsed, _, err := net.SplitHostPort(host); err == nil { return strings.ToLower(parsed) } return strings.ToLower(strings.Trim(host, "[]")) } func main() { hostname := strings.ToLower(strings.TrimSpace(os.Getenv("TPROXY_HOSTNAME"))) if hostname == "" { log.Fatal("TPROXY_HOSTNAME is required") } target, err := url.Parse("http://127.0.0.1:8080") if err != nil { log.Fatal(err) } proxy := &httputil.ReverseProxy{ Rewrite: func(request *httputil.ProxyRequest) { request.SetURL(target) request.Out.Host = request.In.Host clientIP := strings.TrimSpace(request.In.Header.Get("X-Real-IP")) if net.ParseIP(clientIP) == nil { clientIP, _, _ = net.SplitHostPort(request.In.RemoteAddr) } request.Out.Header.Set("X-Real-IP", clientIP) request.Out.Header.Set("X-Forwarded-For", clientIP) if proto := request.In.Header.Get("X-Forwarded-Proto"); proto != "" { request.Out.Header.Set("X-Forwarded-Proto", proto) } }, ErrorHandler: func(response http.ResponseWriter, _ *http.Request, proxyErr error) { log.Printf("relay error: %v", proxyErr) http.Error(response, "upstream unavailable", http.StatusBadGateway) }, } handler := http.HandlerFunc(func(response http.ResponseWriter, request *http.Request) { if requestHostname(request.Host) != hostname { http.Error(response, "misdirected request", http.StatusMisdirectedRequest) return } response.Header().Set("X-Content-Type-Options", "nosniff") response.Header().Set("Referrer-Policy", "no-referrer") staticPath := request.URL.Path == "/" || request.URL.Path == "/about" || request.URL.Path == "/privacy" if request.Method == http.MethodGet && request.URL.RawQuery == "" && staticPath { response.Header().Set("Content-Type", "text/html; charset=utf-8") response.Header().Set("Cache-Control", "public, max-age=300") _, _ = fmt.Fprint(response, page) return } proxy.ServeHTTP(response, request) }) server := &http.Server{ Addr: ":8088", Handler: handler, ReadHeaderTimeout: 10 * time.Second, IdleTimeout: 90 * time.Second, } log.Printf("ingress listening on %s for %s", server.Addr, hostname) log.Fatal(server.ListenAndServe()) }