refactor(real_ip): move header check before everything else

This commit is contained in:
yusing
2025-08-28 22:03:48 +08:00
parent 11d18091fd
commit 205928a741

View File

@@ -59,6 +59,17 @@ func (ri *realIP) isInCIDRList(ip net.IP) bool {
}
func (ri *realIP) setRealIP(req *http.Request) {
// skip first if header is not present
realIPs := req.Header.Values(ri.Header)
if len(realIPs) == 0 {
// try non-canonical key
realIPs = req.Header[ri.Header]
}
if len(realIPs) == 0 {
return
}
clientIPStr, _, err := net.SplitHostPort(req.RemoteAddr)
if err != nil {
clientIPStr = req.RemoteAddr
@@ -77,18 +88,8 @@ func (ri *realIP) setRealIP(req *http.Request) {
return
}
realIPs := req.Header.Values(ri.Header)
lastNonTrustedIP := ""
if len(realIPs) == 0 {
// try non-canonical key
realIPs = req.Header[ri.Header]
}
if len(realIPs) == 0 {
return
}
if !ri.Recursive {
lastNonTrustedIP = realIPs[len(realIPs)-1]
} else {