diff --git a/main.go b/main.go index 616e5fd..9536c65 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "fmt" "io" "log" + "net" "net/http" "os" "strings" @@ -27,12 +28,26 @@ type ConfigTelegraam struct { } func GetRemoteAddr(r *http.Request) string { - realIP := r.Header.Get("X-Real-IP") - if realIP != "" { + // Сначала смотрим X-Forwarded-For + if xff := r.Header.Get("X-Forwarded-For"); xff != "" { + // X-Forwarded-For может содержать несколько IP через запятую + ips := strings.Split(xff, ",") + if len(ips) > 0 { + return strings.TrimSpace(ips[0]) + } + } + + // Потом X-Real-IP + if realIP := r.Header.Get("X-Real-IP"); realIP != "" { return realIP - } else { + } + + // И в конце RemoteAddr + host, _, err := net.SplitHostPort(r.RemoteAddr) + if err != nil { return r.RemoteAddr } + return host } func BuildMessage(r *http.Request) string {