mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-07 02:20:25 +08:00
反向代理设置中增加移除回源主机名端口功能
This commit is contained in:
@@ -146,6 +146,12 @@ func (this *HTTPRequest) doReverseProxy() {
|
|||||||
} else {
|
} else {
|
||||||
this.RawReq.Host = requestHost
|
this.RawReq.Host = requestHost
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 是否移除端口
|
||||||
|
if this.reverseProxy.RequestHostExcludingPort {
|
||||||
|
this.RawReq.Host = utils.ParseAddrHost(this.RawReq.Host)
|
||||||
|
}
|
||||||
|
|
||||||
this.RawReq.URL.Host = this.RawReq.Host
|
this.RawReq.URL.Host = this.RawReq.Host
|
||||||
} else if this.reverseProxy.RequestHostType == serverconfigs.RequestHostTypeOrigin {
|
} else if this.reverseProxy.RequestHostType == serverconfigs.RequestHostTypeOrigin {
|
||||||
// 源站主机名
|
// 源站主机名
|
||||||
@@ -157,9 +163,21 @@ func (this *HTTPRequest) doReverseProxy() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.RawReq.Host = hostname
|
this.RawReq.Host = hostname
|
||||||
|
|
||||||
|
// 是否移除端口
|
||||||
|
if this.reverseProxy.RequestHostExcludingPort {
|
||||||
|
this.RawReq.Host = utils.ParseAddrHost(this.RawReq.Host)
|
||||||
|
}
|
||||||
|
|
||||||
this.RawReq.URL.Host = this.RawReq.Host
|
this.RawReq.URL.Host = this.RawReq.Host
|
||||||
} else {
|
} else {
|
||||||
this.RawReq.URL.Host = this.ReqHost
|
this.RawReq.URL.Host = this.ReqHost
|
||||||
|
|
||||||
|
// 是否移除端口
|
||||||
|
if this.reverseProxy.RequestHostExcludingPort {
|
||||||
|
this.RawReq.Host = utils.ParseAddrHost(this.RawReq.Host)
|
||||||
|
this.RawReq.URL.Host = utils.ParseAddrHost(this.RawReq.URL.Host)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 重组请求URL
|
// 重组请求URL
|
||||||
|
|||||||
@@ -208,20 +208,3 @@ func httpAcceptEncoding(acceptEncodings string, encoding string) bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// 分隔编码
|
|
||||||
func httpAcceptEncodings(acceptEncodings string) (encodings []string) {
|
|
||||||
if len(acceptEncodings) == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var pieces = strings.Split(acceptEncodings, ",")
|
|
||||||
for _, piece := range pieces {
|
|
||||||
var qualityIndex = strings.Index(piece, ";")
|
|
||||||
if qualityIndex >= 0 {
|
|
||||||
piece = piece[:qualityIndex]
|
|
||||||
}
|
|
||||||
|
|
||||||
encodings = append(encodings, strings.TrimSpace(piece))
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -25,3 +25,16 @@ func ListenReuseAddr(network string, addr string) (net.Listener, error) {
|
|||||||
}
|
}
|
||||||
return config.Listen(context.Background(), network, addr)
|
return config.Listen(context.Background(), network, addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ParseAddrHost 分析地址中的主机名部分
|
||||||
|
func ParseAddrHost(addr string) string {
|
||||||
|
if len(addr) == 0 {
|
||||||
|
return addr
|
||||||
|
}
|
||||||
|
|
||||||
|
host, _, err := net.SplitHostPort(addr)
|
||||||
|
if err != nil {
|
||||||
|
return addr
|
||||||
|
}
|
||||||
|
return host
|
||||||
|
}
|
||||||
|
|||||||
14
internal/utils/net_test.go
Normal file
14
internal/utils/net_test.go
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||||
|
|
||||||
|
package utils_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/TeaOSLab/EdgeNode/internal/utils"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestParseAddrHost(t *testing.T) {
|
||||||
|
for _, addr := range []string{"a", "example.com", "example.com:1234", "::1", "[::1]", "[::1]:8080"} {
|
||||||
|
t.Log(addr + " => " + utils.ParseAddrHost(addr))
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user