http: Don't modify req, create clone instead
This commit is contained in:
parent
0c8c34d81d
commit
6c73ec0f88
@ -75,22 +75,27 @@ func (this *Handler) Configure (config step.Meta) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (this *Handler) ServeHTTP (res http.ResponseWriter, req *http.Request) {
|
func (this *Handler) ServeHTTP (res http.ResponseWriter, req *http.Request) {
|
||||||
|
filesystem := this.Environment.GetFS()
|
||||||
|
|
||||||
|
// get the real client IP
|
||||||
remoteAddrStr := req.RemoteAddr
|
remoteAddrStr := req.RemoteAddr
|
||||||
|
realRemoteAddr := req.RemoteAddr
|
||||||
if addr := req.Header.Get("CF-Connecting-IP"); addr != "" {
|
if addr := req.Header.Get("CF-Connecting-IP"); addr != "" {
|
||||||
if this.TrustCFConnectingIP {
|
if this.TrustCFConnectingIP {
|
||||||
proxy := req.RemoteAddr
|
realRemoteAddr = addr
|
||||||
req.RemoteAddr = addr
|
remoteAddrStr = fmt.Sprintf("%s --CF-> %s", addr, req.RemoteAddr)
|
||||||
remoteAddrStr = fmt.Sprintf("%s --CF-> %s", addr, proxy)
|
|
||||||
}
|
}
|
||||||
} else if addr := req.Header.Get("X-Forwarded-For"); addr != "" {
|
} else if addr := req.Header.Get("X-Forwarded-For"); addr != "" {
|
||||||
if this.TrustXForwardedFor {
|
if this.TrustXForwardedFor {
|
||||||
proxy := req.RemoteAddr
|
realRemoteAddr = addr
|
||||||
req.RemoteAddr = addr
|
remoteAddrStr = fmt.Sprintf("%s --XF-> %s", addr, req.RemoteAddr)
|
||||||
remoteAddrStr = fmt.Sprintf("%s --XF-> %s", addr, proxy)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make req clone with correct ip
|
||||||
|
req = req.Clone(req.Context())
|
||||||
|
req.RemoteAddr = realRemoteAddr
|
||||||
log.Println("(i)", req.Method, req.URL, "from", remoteAddrStr)
|
log.Println("(i)", req.Method, req.URL, "from", remoteAddrStr)
|
||||||
filesystem := this.Environment.GetFS()
|
|
||||||
|
|
||||||
// rate limit
|
// rate limit
|
||||||
err := this.rateLimit(req, "", this.RateLimit)
|
err := this.rateLimit(req, "", this.RateLimit)
|
||||||
|
Loading…
Reference in New Issue
Block a user