package middleware import ( "net" "strings" ) const ( xForwardedFor = "X-Forwarded-For" xForwardedMethod = "X-Forwarded-Method" xForwardedHost = "X-Forwarded-Host" xForwardedProto = "X-Forwarded-Proto" xForwardedURI = "X-Forwarded-Uri" xForwardedPort = "X-Forwarded-Port" ) var SetXForwarded = &Middleware{ before: Rewrite(func(req *Request) { delXForwarded(req) clientIP, _, err := net.SplitHostPort(req.RemoteAddr) if err == nil { req.Header.Set(xForwardedFor, clientIP) } else { req.Header.Set(xForwardedFor, req.RemoteAddr) } req.Header.Set(xForwardedHost, req.Host) if req.TLS == nil { req.Header.Set(xForwardedProto, "http") } else { req.Header.Set(xForwardedProto, "https") } }), } var HideXForwarded = &Middleware{ before: Rewrite(delXForwarded), } func delXForwarded(req *Request) { req.Header.Del("Forwarded") toRemove := make([]string, 0) for k := range req.Header { if strings.HasPrefix(k, "X-Forwarded-") { toRemove = append(toRemove, k) } } for _, k := range toRemove { req.Header.Del(k) } }