反向代理可以整体设置源站默认超时时间等参数

This commit is contained in:
GoEdgeLab
2021-03-26 22:11:05 +08:00
parent 73dbf38448
commit 43db1e6411
3 changed files with 102 additions and 2 deletions

View File

@@ -4,6 +4,7 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
_ "github.com/go-sql-driver/mysql" _ "github.com/go-sql-driver/mysql"
"github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/dbs"
@@ -149,6 +150,37 @@ func (this *ReverseProxyDAO) ComposeReverseProxyConfig(tx *dbs.Tx, reverseProxyI
config.AddHeaders = addHeaders config.AddHeaders = addHeaders
} }
// 源站相关默认设置
config.MaxConns = int(reverseProxy.MaxConns)
config.MaxIdleConns = int(reverseProxy.MaxIdleConns)
if IsNotNull(reverseProxy.ConnTimeout) {
connTimeout := &shared.TimeDuration{}
err = json.Unmarshal([]byte(reverseProxy.ConnTimeout), &connTimeout)
if err != nil {
return nil, err
}
config.ConnTimeout = connTimeout
}
if IsNotNull(reverseProxy.ReadTimeout) {
readTimeout := &shared.TimeDuration{}
err = json.Unmarshal([]byte(reverseProxy.ReadTimeout), &readTimeout)
if err != nil {
return nil, err
}
config.ReadTimeout = readTimeout
}
if IsNotNull(reverseProxy.IdleTimeout) {
idleTimeout := &shared.TimeDuration{}
err = json.Unmarshal([]byte(reverseProxy.IdleTimeout), &idleTimeout)
if err != nil {
return nil, err
}
config.IdleTimeout = idleTimeout
}
return config, nil return config, nil
} }
@@ -242,7 +274,7 @@ func (this *ReverseProxyDAO) UpdateReverseProxyBackupOrigins(tx *dbs.Tx, reverse
} }
// 修改是否启用 // 修改是否启用
func (this *ReverseProxyDAO) UpdateReverseProxy(tx *dbs.Tx, reverseProxyId int64, requestHostType int8, requestHost string, requestURI string, stripPrefix string, autoFlush bool, addHeaders []string) error { func (this *ReverseProxyDAO) UpdateReverseProxy(tx *dbs.Tx, reverseProxyId int64, requestHostType int8, requestHost string, requestURI string, stripPrefix string, autoFlush bool, addHeaders []string, connTimeout *shared.TimeDuration, readTimeout *shared.TimeDuration, idleTimeout *shared.TimeDuration, maxConns int32, maxIdleConns int32) error {
if reverseProxyId <= 0 { if reverseProxyId <= 0 {
return errors.New("invalid reverseProxyId") return errors.New("invalid reverseProxyId")
} }
@@ -269,6 +301,38 @@ func (this *ReverseProxyDAO) UpdateReverseProxy(tx *dbs.Tx, reverseProxyId int64
} }
op.AddHeaders = addHeadersJSON op.AddHeaders = addHeadersJSON
if connTimeout != nil {
connTimeoutJSON, err := connTimeout.AsJSON()
if err != nil {
return err
}
op.ConnTimeout = connTimeoutJSON
}
if readTimeout != nil {
readTimeoutJSON, err := readTimeout.AsJSON()
if err != nil {
return err
}
op.ReadTimeout = readTimeoutJSON
}
if idleTimeout != nil {
idleTimeoutJSON, err := idleTimeout.AsJSON()
if err != nil {
return err
}
op.IdleTimeout = idleTimeoutJSON
}
if maxConns >= 0 {
op.MaxConns = maxConns
} else {
op.MaxConns = 0
}
if maxIdleConns >= 0 {
op.MaxIdleConns = maxIdleConns
} else {
op.MaxIdleConns = 0
}
err = this.Save(tx, op) err = this.Save(tx, op)
if err != nil { if err != nil {
return err return err

View File

@@ -18,6 +18,11 @@ type ReverseProxy struct {
AddHeaders string `field:"addHeaders"` // 自动添加的Header列表 AddHeaders string `field:"addHeaders"` // 自动添加的Header列表
State uint8 `field:"state"` // 状态 State uint8 `field:"state"` // 状态
CreatedAt uint64 `field:"createdAt"` // 创建时间 CreatedAt uint64 `field:"createdAt"` // 创建时间
ConnTimeout string `field:"connTimeout"` // 连接超时时间
ReadTimeout string `field:"readTimeout"` // 读取超时时间
IdleTimeout string `field:"idleTimeout"` // 空闲超时时间
MaxConns uint32 `field:"maxConns"` // 最大并发连接数
MaxIdleConns uint32 `field:"maxIdleConns"` // 最大空闲连接数
} }
type ReverseProxyOperator struct { type ReverseProxyOperator struct {
@@ -37,6 +42,11 @@ type ReverseProxyOperator struct {
AddHeaders interface{} // 自动添加的Header列表 AddHeaders interface{} // 自动添加的Header列表
State interface{} // 状态 State interface{} // 状态
CreatedAt interface{} // 创建时间 CreatedAt interface{} // 创建时间
ConnTimeout interface{} // 连接超时时间
ReadTimeout interface{} // 读取超时时间
IdleTimeout interface{} // 空闲超时时间
MaxConns interface{} // 最大并发连接数
MaxIdleConns interface{} // 最大空闲连接数
} }
func NewReverseProxyOperator() *ReverseProxyOperator { func NewReverseProxyOperator() *ReverseProxyOperator {

View File

@@ -5,6 +5,7 @@ import (
"encoding/json" "encoding/json"
"github.com/TeaOSLab/EdgeAPI/internal/db/models" "github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
"github.com/iwind/TeaGo/types" "github.com/iwind/TeaGo/types"
) )
@@ -214,7 +215,32 @@ func (this *ReverseProxyService) UpdateReverseProxy(ctx context.Context, req *pb
tx := this.NullTx() tx := this.NullTx()
err = models.SharedReverseProxyDAO.UpdateReverseProxy(tx, req.ReverseProxyId, types.Int8(req.RequestHostType), req.RequestHost, req.RequestURI, req.StripPrefix, req.AutoFlush, req.AddHeaders) // 校验参数
var connTimeout = &shared.TimeDuration{}
if len(req.ConnTimeoutJSON) > 0 {
err = json.Unmarshal(req.ConnTimeoutJSON, connTimeout)
if err != nil {
return nil, err
}
}
var readTimeout = &shared.TimeDuration{}
if len(req.ReadTimeoutJSON) > 0 {
err = json.Unmarshal(req.ReadTimeoutJSON, readTimeout)
if err != nil {
return nil, err
}
}
var idleTimeout = &shared.TimeDuration{}
if len(req.IdleTimeoutJSON) > 0 {
err = json.Unmarshal(req.IdleTimeoutJSON, idleTimeout)
if err != nil {
return nil, err
}
}
err = models.SharedReverseProxyDAO.UpdateReverseProxy(tx, req.ReverseProxyId, types.Int8(req.RequestHostType), req.RequestHost, req.RequestURI, req.StripPrefix, req.AutoFlush, req.AddHeaders, connTimeout, readTimeout, idleTimeout, req.MaxConns, req.MaxIdleConns)
if err != nil { if err != nil {
return nil, err return nil, err
} }