cnlh 5 년 전
부모
커밋
0af9943540
5개의 변경된 파일14개의 추가작업 그리고 7개의 파일을 삭제
  1. 2 1
      conf/nps.conf
  2. 1 0
      docs/description.md
  3. 5 3
      lib/common/util.go
  4. 4 2
      server/proxy/http.go
  5. 2 1
      server/server.go

+ 2 - 1
conf/nps.conf

@@ -74,4 +74,5 @@ system_info_display=false
 http_cache=false
 http_cache_length=100
 
-
+#get origin ip
+http_add_origin_header=false

+ 1 - 0
docs/description.md

@@ -1,5 +1,6 @@
 # 说明
 ## 获取用户真实ip
+如需使用需要在`nps.conf`中设置`http_add_origin_header=true`
 
 在域名代理模式中,可以通过request请求 header 中的 X-Forwarded-For 和 X-Real-IP 来获取用户真实 IP。
 

+ 5 - 3
lib/common/util.go

@@ -98,7 +98,7 @@ func Getverifyval(vkey string) string {
 }
 
 //Change headers and host of request
-func ChangeHostAndHeader(r *http.Request, host string, header string, addr string) {
+func ChangeHostAndHeader(r *http.Request, host string, header string, addr string,addOrigin bool) {
 	if host != "" {
 		r.Host = host
 	}
@@ -115,8 +115,10 @@ func ChangeHostAndHeader(r *http.Request, host string, header string, addr strin
 	if prior, ok := r.Header["X-Forwarded-For"]; ok {
 		addr = strings.Join(prior, ", ") + ", " + addr
 	}
-	r.Header.Set("X-Forwarded-For", addr)
-	r.Header.Set("X-Real-IP", addr)
+	if addOrigin {
+		r.Header.Set("X-Forwarded-For", addr)
+		r.Header.Set("X-Real-IP", addr)
+	}
 }
 
 //Read file content by file path

+ 4 - 2
server/proxy/http.go

@@ -30,11 +30,12 @@ type httpServer struct {
 	httpsServer   *http.Server
 	httpsListener net.Listener
 	useCache      bool
+	addOrigin     bool
 	cache         *cache.Cache
 	cacheLen      int
 }
 
-func NewHttp(bridge *bridge.Bridge, c *file.Tunnel, httpPort, httpsPort int, useCache bool, cacheLen int) *httpServer {
+func NewHttp(bridge *bridge.Bridge, c *file.Tunnel, httpPort, httpsPort int, useCache bool, cacheLen int, addOrigin bool) *httpServer {
 	httpServer := &httpServer{
 		BaseServer: BaseServer{
 			task:   c,
@@ -45,6 +46,7 @@ func NewHttp(bridge *bridge.Bridge, c *file.Tunnel, httpPort, httpsPort int, use
 		httpsPort: httpsPort,
 		useCache:  useCache,
 		cacheLen:  cacheLen,
+		addOrigin: addOrigin,
 	}
 	if useCache {
 		httpServer.cache = cache.New(cacheLen)
@@ -214,7 +216,7 @@ reset:
 		}
 
 		//change the host and header and set proxy setting
-		common.ChangeHostAndHeader(r, host.HostChange, host.HeaderChange, c.Conn.RemoteAddr().String())
+		common.ChangeHostAndHeader(r, host.HostChange, host.HeaderChange, c.Conn.RemoteAddr().String(), s.addOrigin)
 		logs.Trace("%s request, method %s, host %s, url %s, remote address %s, target %s", r.URL.Scheme, r.Method, r.Host, r.URL.Path, c.RemoteAddr().String(), lk.Host)
 		//write
 		lenConn = conn.NewLenConn(connClient)

+ 2 - 1
server/server.go

@@ -147,7 +147,8 @@ func NewMode(Bridge *bridge.Bridge, c *file.Tunnel) proxy.Service {
 		httpsPort, _ := beego.AppConfig.Int("https_proxy_port")
 		useCache, _ := beego.AppConfig.Bool("http_cache")
 		cacheLen, _ := beego.AppConfig.Int("http_cache_length")
-		service = proxy.NewHttp(Bridge, c, httpPort, httpsPort, useCache, cacheLen)
+		addOrigin, _ := beego.AppConfig.Bool("http_add_origin_header")
+		service = proxy.NewHttp(Bridge, c, httpPort, httpsPort, useCache, cacheLen, addOrigin)
 	}
 	return service
 }