added real_ip and cloudflare_real_ip middlewares, fixed that some middlewares does not work properly

This commit is contained in:
yusing
2024-09-30 04:03:48 +08:00
parent ac3af49aa7
commit 860e914b90
27 changed files with 463 additions and 179 deletions

View File

@@ -0,0 +1,44 @@
package middleware
import (
"net"
"strings"
)
var AddXForwarded = &Middleware{
rewrite: func(req *Request) {
clientIP, _, err := net.SplitHostPort(req.RemoteAddr)
if err == nil {
req.Header.Set("X-Forwarded-For", clientIP)
} else {
req.Header.Del("X-Forwarded-For")
}
req.Header.Set("X-Forwarded-Host", req.Host)
if req.TLS == nil {
req.Header.Set("X-Forwarded-Proto", "http")
} else {
req.Header.Set("X-Forwarded-Proto", "https")
}
},
}
var SetXForwarded = &Middleware{
rewrite: func(req *Request) {
clientIP, _, err := net.SplitHostPort(req.RemoteAddr)
if err == nil {
prior := req.Header["X-Forwarded-For"]
if len(prior) > 0 {
clientIP = strings.Join(prior, ", ") + ", " + clientIP
}
req.Header.Set("X-Forwarded-For", clientIP)
} else {
req.Header.Del("X-Forwarded-For")
}
req.Header.Set("X-Forwarded-Host", req.Host)
if req.TLS == nil {
req.Header.Set("X-Forwarded-Proto", "http")
} else {
req.Header.Set("X-Forwarded-Proto", "https")
}
},
}