// RemoteIP finds IP Address given http.Request struct. func RemoteIP(ipLookups []string, r engine.Request) string { realIP := r.Header().Get("X-Real-IP") forwardedFor := r.Header().Get("X-Forwarded-For") for _, lookup := range ipLookups { if lookup == "RemoteAddr" { return ipAddrFromRemoteAddr(r.RemoteAddress()) } if lookup == "X-Forwarded-For" && forwardedFor != "" { // X-Forwarded-For is potentially a list of addresses separated with "," parts := strings.Split(forwardedFor, ",") for i, p := range parts { parts[i] = strings.TrimSpace(p) } return parts[0] } if lookup == "X-Real-IP" && realIP != "" { return realIP } } return "" }