diff --git a/src/handlers.go b/src/handlers.go index 9c4256e..7b2d6d2 100644 --- a/src/handlers.go +++ b/src/handlers.go @@ -340,11 +340,15 @@ func (ctx *Instance) ServeHTTP(wOrig http.ResponseWriter, r *http.Request) { statusCode: new(int), } - clientIP := r.Header.Get("X-Forwarded-For") - clientIP = strings.Split(clientIP, ", ")[0] + clientIP := r.RemoteAddr - if clientIP == "" { - clientIP = r.RemoteAddr + if (ctx.UseXForwarded) { + forwardedIP := r.Header.Get("X-Forwarded-For") + forwardedIP = strings.Split(forwardedIP, ", ")[0] + + if forwardedIP != "" { + clientIP = forwardedIP + } } ctx.mux.ServeHTTP(w, r) diff --git a/src/instance.go b/src/instance.go index 0ec5d8e..f446439 100644 --- a/src/instance.go +++ b/src/instance.go @@ -25,6 +25,7 @@ type Instance struct { StateDir string ThemeDir string AttemptInterval time.Duration + UseXForwarded bool Runtime RuntimeConfig diff --git a/src/mothd.go b/src/mothd.go index abf02cb..a61666e 100644 --- a/src/mothd.go +++ b/src/mothd.go @@ -52,6 +52,12 @@ func main() { 20*time.Second, "Time between maintenance tasks", ) + flag.BoolVar( + &ctx.UseXForwarded, + "x-forwarded-for", + false, + "Emit IPs from the X-Forwarded-For header in logs, when available, instead of the source IP. Use this when running behind a load-balancer or proxy", + ) listen := flag.String( "listen", ":8080",