package router import ( "net/http" "strings" "github.com/labstack/echo/v4" ) func HttpRealIP() echo.MiddlewareFunc { return func(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { if XForwardedFor := c.Request().Header.Get(http.CanonicalHeaderKey("X-Forwarded-For")); XForwardedFor != "" { dataIndex := strings.Index(XForwardedFor, ", ") if dataIndex == -1 { dataIndex = len(XForwardedFor) } c.Request().RemoteAddr = XForwardedFor[:dataIndex] } else if XRealIP := c.Request().Header.Get(http.CanonicalHeaderKey("X-Real-IP")); XRealIP != "" { c.Request().RemoteAddr = XRealIP } return next(c) } } }