Browse Source

DB connection lifetime++, client IP in logs by proxy server headers, user agent in logs

Vova Tkach 5 years ago
parent
commit
67e2bd5344

+ 2 - 2
engine/wrapper/wrapper.go

@@ -122,8 +122,8 @@ func (this *Wrapper) UseDatabase() error {
 		}
 	}
 
-	// Max 30 minutes and max 2 connection per host
-	this.DB.SetConnMaxLifetime(time.Minute * 30)
+	// Max 60 minutes and max 2 connection per host
+	this.DB.SetConnMaxLifetime(time.Minute * 60)
 	this.DB.SetMaxIdleConns(2)
 	this.DB.SetMaxOpenConns(2)
 

+ 1 - 1
go.mod

@@ -4,7 +4,7 @@ require (
 	github.com/go-sql-driver/mysql v1.4.1
 	github.com/vladimirok5959/golang-server-bootstrap v1.0.5
 	github.com/vladimirok5959/golang-server-resources v1.0.2
-	github.com/vladimirok5959/golang-server-sessions v1.0.4
+	github.com/vladimirok5959/golang-server-sessions v1.0.5
 	github.com/vladimirok5959/golang-server-static v1.0.0
 	google.golang.org/appengine v1.4.0 // indirect
 )

+ 2 - 0
go.sum

@@ -13,6 +13,8 @@ github.com/vladimirok5959/golang-server-sessions v1.0.3 h1:P2HKDP1zY6H6XYrB8LzsW
 github.com/vladimirok5959/golang-server-sessions v1.0.3/go.mod h1:W6eCEIltyTs5IUvN1DfzLk59z+M1031kr8bMFUiq8vU=
 github.com/vladimirok5959/golang-server-sessions v1.0.4 h1:LsqgTDAjeSnPblzpof4GBTNV04Kv8T5FI1UvIX7WUTQ=
 github.com/vladimirok5959/golang-server-sessions v1.0.4/go.mod h1:W6eCEIltyTs5IUvN1DfzLk59z+M1031kr8bMFUiq8vU=
+github.com/vladimirok5959/golang-server-sessions v1.0.5 h1:/DgfYZ0cEfy4P9v2BEgScC89Mur25mSUQ2D5f/87Tb8=
+github.com/vladimirok5959/golang-server-sessions v1.0.5/go.mod h1:W6eCEIltyTs5IUvN1DfzLk59z+M1031kr8bMFUiq8vU=
 github.com/vladimirok5959/golang-server-static v1.0.0 h1:jmVNUCVF44+Am0euUMYFN4L3gdJYwm7aS8LFUmUAHJk=
 github.com/vladimirok5959/golang-server-static v1.0.0/go.mod h1:dxZsjCCpT65Z9dLP6p7RmR2rbgtYj6E4FSSSUqkNrsw=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=

+ 14 - 2
logger/handler.go

@@ -16,10 +16,21 @@ type handler struct {
 }
 
 func (this handler) log(w *writer, r *http.Request) {
+	rip := r.RemoteAddr
+	if r.Header.Get("X-Real-IP") != "" && len(r.Header.Get("X-Real-IP")) <= 25 {
+		rip = rip + ", " + strings.TrimSpace(r.Header.Get("X-Real-IP"))
+	} else if r.Header.Get("X-Forwarded-For") != "" && len(r.Header.Get("X-Forwarded-For")) <= 25 {
+		rip = rip + ", " + strings.TrimSpace(r.Header.Get("X-Forwarded-For"))
+	}
+
+	uagent := "-"
+	if r.Header.Get("User-Agent") != "" && len(r.Header.Get("User-Agent")) <= 256 {
+		uagent = strings.TrimSpace(r.Header.Get("User-Agent"))
+	}
+
 	msg := fmt.Sprint(strings.Join([]string{
 		r.Host,
-		r.RemoteAddr,
-		"-",
+		"(" + rip + ")",
 		"[" + w.s.Format(time.RFC3339) + "]",
 		`"` + r.Method,
 		r.RequestURI,
@@ -27,6 +38,7 @@ func (this handler) log(w *writer, r *http.Request) {
 		strconv.Itoa(w.status),
 		strconv.Itoa(w.size),
 		fmt.Sprintf("%.3f ms", time.Now().Sub(w.s).Seconds()),
+		`"` + uagent + `"`,
 	}, " "))
 
 	select {

+ 10 - 1
vendor/github.com/vladimirok5959/golang-server-sessions/session/session.go

@@ -7,6 +7,7 @@ import (
 	"math/rand"
 	"net/http"
 	"os"
+	"strings"
 	"time"
 )
 
@@ -53,7 +54,15 @@ func New(w http.ResponseWriter, r *http.Request, tmpdir string) *Session {
 		// Create new
 		rand.Seed(time.Now().Unix())
 
-		sign := r.RemoteAddr + r.Header.Get("User-Agent") + fmt.Sprintf("%d", int64(time.Now().Unix())) + fmt.Sprintf("%d", int64(rand.Intn(9999999-99)+99))
+		// Real remote IP for proxy servers
+		rRemoteAddr := r.RemoteAddr
+		if r.Header.Get("X-Real-IP") != "" && len(r.Header.Get("X-Real-IP")) <= 25 {
+			rRemoteAddr = rRemoteAddr + ", " + strings.TrimSpace(r.Header.Get("X-Real-IP"))
+		} else if r.Header.Get("X-Forwarded-For") != "" && len(r.Header.Get("X-Forwarded-For")) <= 25 {
+			rRemoteAddr = rRemoteAddr + ", " + strings.TrimSpace(r.Header.Get("X-Forwarded-For"))
+		}
+
+		sign := rRemoteAddr + r.Header.Get("User-Agent") + fmt.Sprintf("%d", int64(time.Now().Unix())) + fmt.Sprintf("%d", int64(rand.Intn(9999999-99)+99))
 		sess.i = fmt.Sprintf("%x", sha1.Sum([]byte(sign)))
 
 		http.SetCookie(w, &http.Cookie{

+ 1 - 1
vendor/modules.txt

@@ -4,7 +4,7 @@ github.com/go-sql-driver/mysql
 github.com/vladimirok5959/golang-server-bootstrap/bootstrap
 # github.com/vladimirok5959/golang-server-resources v1.0.2
 github.com/vladimirok5959/golang-server-resources/resource
-# github.com/vladimirok5959/golang-server-sessions v1.0.4
+# github.com/vladimirok5959/golang-server-sessions v1.0.5
 github.com/vladimirok5959/golang-server-sessions/session
 # github.com/vladimirok5959/golang-server-static v1.0.0
 github.com/vladimirok5959/golang-server-static/static