fix realIP middleware not getting IP in some cases

This commit is contained in:
yusing 2024-12-18 07:45:08 +08:00
parent 942651dc16
commit f683ab64ab
2 changed files with 6 additions and 1 deletions

View file

@ -38,7 +38,7 @@ var CloudflareRealIP = NewMiddleware[cloudflareRealIP]()
// setup implements MiddlewareWithSetup. // setup implements MiddlewareWithSetup.
func (cri *cloudflareRealIP) setup() { func (cri *cloudflareRealIP) setup() {
cri.realIP.RealIPOpts = RealIPOpts{ cri.realIP.RealIPOpts = RealIPOpts{
Header: "CF-Connecting-IP", Header: "Cf-Connecting-Ip",
Recursive: cri.Recursive, Recursive: cri.Recursive,
} }
} }

View file

@ -84,6 +84,11 @@ func (ri *realIP) setRealIP(req *http.Request) {
realIPs := req.Header.Values(ri.Header) realIPs := req.Header.Values(ri.Header)
lastNonTrustedIP := "" lastNonTrustedIP := ""
if len(realIPs) == 0 {
// try non-canonical key
realIPs = req.Header[ri.Header]
}
if len(realIPs) == 0 { if len(realIPs) == 0 {
ri.AddTracef("no real ip found in header %s", ri.Header).WithRequest(req) ri.AddTracef("no real ip found in header %s", ri.Header).WithRequest(req)
return return