反向代理支持RequestPath、RequestURI等

This commit is contained in:
GoEdgeLab
2020-09-27 10:02:54 +08:00
parent 6c79fb1d3f
commit 47a1a477f3
5 changed files with 129 additions and 7 deletions

View File

@@ -1,7 +1,72 @@
package nodes
import (
"github.com/TeaOSLab/EdgeNode/internal/utils"
"strings"
)
// 处理反向代理
func (this *HTTPRequest) doReverseProxy() {
if this.reverseProxy == nil {
return
}
// StripPrefix
if len(this.reverseProxy.StripPrefix) > 0 {
stripPrefix := this.reverseProxy.StripPrefix
if stripPrefix[0] != '/' {
stripPrefix = "/" + stripPrefix
}
this.uri = strings.TrimPrefix(this.uri, stripPrefix)
if len(this.uri) == 0 || this.uri[0] != '/' {
this.uri = "/" + this.uri
}
}
// RequestURI
if len(this.reverseProxy.RequestURI) > 0 {
if this.reverseProxy.RequestURIHasVariables() {
this.uri = this.Format(this.reverseProxy.RequestURI)
} else {
this.uri = this.reverseProxy.RequestURI
}
if len(this.uri) == 0 || this.uri[0] != '/' {
this.uri = "/" + this.uri
}
// 处理RequestURI中的问号
questionMark := strings.LastIndex(this.uri, "?")
if questionMark > 0 {
path := this.uri[:questionMark]
if strings.Contains(path, "?") {
this.uri = path + "&" + this.uri[questionMark+1:]
}
}
// 去除多个/
this.uri = utils.CleanPath(this.uri)
}
// 重组请求URL
questionMark := strings.Index(this.uri, "?")
if questionMark > -1 {
this.RawReq.URL.Path = this.uri[:questionMark]
this.RawReq.URL.RawQuery = this.uri[questionMark+1:]
} else {
this.RawReq.URL.Path = this.uri
this.RawReq.URL.RawQuery = ""
}
// RequestHost
if len(this.reverseProxy.RequestHost) > 0 {
if this.reverseProxy.RequestHostHasVariables() {
this.RawReq.Host = this.Format(this.reverseProxy.RequestHost)
} else {
this.RawReq.Host = this.reverseProxy.RequestHost
}
this.RawReq.URL.Host = this.RawReq.Host
}
// 判断是否为Websocket请求
if this.RawReq.Header.Get("Upgrade") == "websocket" {
this.doWebsocket()
@@ -11,4 +76,3 @@ func (this *HTTPRequest) doReverseProxy() {
// 普通HTTP请求
// TODO
}