From 6d30a12d5f6bc55b38c4bc52f3f01767b7770cbd Mon Sep 17 00:00:00 2001 From: Star Brilliant Date: Thu, 30 Jul 2020 20:42:36 +0800 Subject: [PATCH] Pass X-Real-IP to handlers.CombinedLoggingHandler Note that X-Forwarded-For or guessed client IP are not used due to security concerns. This should fix issue #71. --- doh-server/server.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/doh-server/server.go b/doh-server/server.go index 7dd726d..d4555ab 100644 --- a/doh-server/server.go +++ b/doh-server/server.go @@ -136,6 +136,18 @@ func (s *Server) Start() error { func (s *Server) handlerFunc(w http.ResponseWriter, r *http.Request) { ctx := r.Context() + if realIP := r.Header.Get("X-Real-IP"); realIP != "" { + if strings.ContainsRune(realIP, ':') { + r.RemoteAddr = "[" + realIP + "]:0" + } else { + r.RemoteAddr = realIP + ":0" + } + _, _, err := net.SplitHostPort(r.RemoteAddr) + if err != nil { + r.RemoteAddr = realIP + } + } + w.Header().Set("Access-Control-Allow-Headers", "Content-Type") w.Header().Set("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS, POST") w.Header().Set("Access-Control-Allow-Origin", "*")