mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-05 01:20:25 +08:00
反向代理可以整体设置源站默认超时时间等参数
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user