From 0fb7255a0b5cd6e3b2f10c805e7ce01a20882337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Tue, 26 Jan 2021 20:28:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E9=85=8D=E7=BD=AE=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=9C=A8=E5=8F=8D=E5=90=91=E4=BB=A3=E7=90=86=E4=B8=AD?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0X-Real-IP=E5=92=8CX-Forwarded-*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/nodes/http_request.go | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/internal/nodes/http_request.go b/internal/nodes/http_request.go index 7e82282..cf605bc 100644 --- a/internal/nodes/http_request.go +++ b/internal/nodes/http_request.go @@ -864,8 +864,8 @@ func (this *HTTPRequest) requestServerPort() int { // 设置代理相关头部信息 // 参考:https://tools.ietf.org/html/rfc7239 -// TODO X-Forwarded-* 系列做成可选项,避免有些源站屏蔽此项 func (this *HTTPRequest) setForwardHeaders(header http.Header) { + // TODO 做成可选项 if this.RawReq.Header.Get("Connection") == "close" { this.RawReq.Header.Set("Connection", "keep-alive") } @@ -877,7 +877,7 @@ func (this *HTTPRequest) setForwardHeaders(header http.Header) { } // x-real-ip - { + if this.reverseProxy != nil && this.reverseProxy.ShouldAddXRealIPHeader() { _, ok1 := header["X-Real-IP"] _, ok2 := header["X-Real-Ip"] if !ok1 && !ok2 { @@ -886,7 +886,7 @@ func (this *HTTPRequest) setForwardHeaders(header http.Header) { } // X-Forwarded-For - { + if this.reverseProxy != nil && this.reverseProxy.ShouldAddXForwardedForHeader() { forwardedFor, ok := header["X-Forwarded-For"] if ok { _, hasForwardHeader := this.RawReq.Header["X-Forwarded-For"] @@ -909,14 +909,20 @@ func (this *HTTPRequest) setForwardHeaders(header http.Header) { }**/ // others - this.RawReq.Header.Set("X-Forwarded-By", this.ServerAddr) - - if _, ok := header["X-Forwarded-Host"]; !ok { - this.RawReq.Header.Set("X-Forwarded-Host", this.Host) + if this.reverseProxy != nil && this.reverseProxy.ShouldAddXForwardedByHeader() { + this.RawReq.Header.Set("X-Forwarded-By", this.ServerAddr) } - if _, ok := header["X-Forwarded-Proto"]; !ok { - this.RawReq.Header.Set("X-Forwarded-Proto", this.requestScheme()) + if this.reverseProxy != nil && this.reverseProxy.ShouldAddXForwardedHostHeader() { + if _, ok := header["X-Forwarded-Host"]; !ok { + this.RawReq.Header.Set("X-Forwarded-Host", this.Host) + } + } + + if this.reverseProxy != nil && this.reverseProxy.ShouldAddXForwardedProtoHeader() { + if _, ok := header["X-Forwarded-Proto"]; !ok { + this.RawReq.Header.Set("X-Forwarded-Proto", this.requestScheme()) + } } }