From f683ab64abfd91efd1f438b72d94c6841493924c Mon Sep 17 00:00:00 2001 From: yusing Date: Wed, 18 Dec 2024 07:45:08 +0800 Subject: [PATCH] fix realIP middleware not getting IP in some cases --- internal/net/http/middleware/cloudflare_real_ip.go | 2 +- internal/net/http/middleware/real_ip.go | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/internal/net/http/middleware/cloudflare_real_ip.go b/internal/net/http/middleware/cloudflare_real_ip.go index ab0436c..edee6e3 100644 --- a/internal/net/http/middleware/cloudflare_real_ip.go +++ b/internal/net/http/middleware/cloudflare_real_ip.go @@ -38,7 +38,7 @@ var CloudflareRealIP = NewMiddleware[cloudflareRealIP]() // setup implements MiddlewareWithSetup. func (cri *cloudflareRealIP) setup() { cri.realIP.RealIPOpts = RealIPOpts{ - Header: "CF-Connecting-IP", + Header: "Cf-Connecting-Ip", Recursive: cri.Recursive, } } diff --git a/internal/net/http/middleware/real_ip.go b/internal/net/http/middleware/real_ip.go index df16cfb..8c723d7 100644 --- a/internal/net/http/middleware/real_ip.go +++ b/internal/net/http/middleware/real_ip.go @@ -84,6 +84,11 @@ func (ri *realIP) setRealIP(req *http.Request) { realIPs := req.Header.Values(ri.Header) lastNonTrustedIP := "" + if len(realIPs) == 0 { + // try non-canonical key + realIPs = req.Header[ri.Header] + } + if len(realIPs) == 0 { ri.AddTracef("no real ip found in header %s", ri.Header).WithRequest(req) return