修改反向代理实现

This commit is contained in:
GoEdgeLab
2020-09-21 11:37:24 +08:00
parent 3908d1d56d
commit f796a1d4d7
9 changed files with 127 additions and 92 deletions

View File

@@ -74,7 +74,6 @@ func (this *CreateAction) RunPost(params struct {
var unixConfig *serverconfigs.UnixProtocolConfig = nil
var udpConfig *serverconfigs.UDPProtocolConfig = nil
var webId int64 = 0
var reverseProxyId int64 = 0
switch params.ServerType {
case serverconfigs.ServerTypeHTTPProxy, serverconfigs.ServerTypeHTTPWeb:
@@ -157,6 +156,7 @@ func (this *CreateAction) RunPost(params struct {
}
// 源站地址
reverseProxyRefJSON := []byte{}
switch params.ServerType {
case serverconfigs.ServerTypeHTTPProxy, serverconfigs.ServerTypeTCPProxy:
origins := []*serverconfigs.OriginServerConfig{}
@@ -174,7 +174,15 @@ func (this *CreateAction) RunPost(params struct {
this.ErrorPage(err)
return
}
reverseProxyId = resp.ReverseProxyId
reverseProxyRef := &serverconfigs.ReverseProxyRef{
IsOn: true,
ReverseProxyId: resp.ReverseProxyId,
}
reverseProxyRefJSON, err = json.Marshal(reverseProxyRef)
if err != nil {
this.ErrorPage(err)
return
}
}
// Web地址
@@ -215,7 +223,7 @@ func (this *CreateAction) RunPost(params struct {
IncludeNodesJSON: includeNodesJSON,
ExcludeNodesJSON: excludeNodesJSON,
WebId: webId,
ReverseProxyId: reverseProxyId,
ReverseProxyJSON: reverseProxyRefJSON,
}
if httpConfig != nil {
data, err := json.Marshal(httpConfig)

View File

@@ -17,5 +17,6 @@ func (this *IndexAction) Init() {
func (this *IndexAction) RunGet(params struct {
ServerId int64
}) {
this.RedirectURL("/servers/server/board?serverId=" + strconv.FormatInt(params.ServerId, 10))
// TODO 等看板实现后,需要跳转到看板
this.RedirectURL("/servers/server/settings?serverId=" + strconv.FormatInt(params.ServerId, 10))
}

View File

@@ -2,11 +2,10 @@ package reverseProxy
import (
"encoding/json"
"errors"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/serverutils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
"github.com/iwind/TeaGo/actions"
"github.com/iwind/TeaGo/maps"
)
@@ -22,67 +21,76 @@ func (this *IndexAction) Init() {
func (this *IndexAction) RunGet(params struct {
ServerId int64
}) {
server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId)
if !isOk {
serverTypeResp, err := this.RPC().ServerRPC().FindEnabledServerType(this.AdminContext(), &pb.FindEnabledServerTypeRequest{ServerId: params.ServerId})
if err != nil {
this.ErrorPage(err)
return
}
this.Data["serverType"] = server.Type
this.Data["reverseProxyId"] = server.ReverseProxyId
serverType := serverTypeResp.Type
isOn := false
if server.ReverseProxyId > 0 {
reverseProxyResp, err := this.RPC().ReverseProxyRPC().FindEnabledReverseProxy(this.AdminContext(), &pb.FindEnabledReverseProxyRequest{ReverseProxyId: server.ReverseProxyId})
if err != nil {
this.ErrorPage(err)
return
}
reverseProxy := reverseProxyResp.ReverseProxy
if reverseProxy == nil {
// TODO 应该在界面上提示用户开启
this.ErrorPage(errors.New("reverse proxy should not be nil"))
return
}
isOn = true
primaryOrigins := []*serverconfigs.OriginServerConfig{}
backupOrigins := []*serverconfigs.OriginServerConfig{}
if len(reverseProxy.PrimaryOriginsJSON) > 0 {
err = json.Unmarshal(reverseProxy.PrimaryOriginsJSON, &primaryOrigins)
if err != nil {
this.ErrorPage(err)
return
}
}
if len(reverseProxy.BackupOriginsJSON) > 0 {
err = json.Unmarshal(reverseProxy.BackupOriginsJSON, &backupOrigins)
if err != nil {
this.ErrorPage(err)
return
}
}
primaryOriginMaps := []maps.Map{}
backupOriginMaps := []maps.Map{}
for _, originConfig := range primaryOrigins {
m := maps.Map{
"id": originConfig.Id,
"weight": originConfig.Weight,
"addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
}
primaryOriginMaps = append(primaryOriginMaps, m)
}
for _, originConfig := range backupOrigins {
m := maps.Map{
"id": originConfig.Id,
"weight": originConfig.Weight,
"addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
}
backupOriginMaps = append(backupOriginMaps, m)
}
this.Data["primaryOrigins"] = primaryOriginMaps
this.Data["backupOrigins"] = backupOriginMaps
reverseProxyResp, err := this.RPC().ServerRPC().FindAndInitServerReverseProxyConfig(this.AdminContext(), &pb.FindAndInitServerReverseProxyConfigRequest{ServerId: params.ServerId})
if err != nil {
this.ErrorPage(err)
return
}
this.Data["isOn"] = isOn
reverseProxyRef := &serverconfigs.ReverseProxyRef{}
err = json.Unmarshal(reverseProxyResp.ReverseProxyRef, reverseProxyRef)
if err != nil {
this.ErrorPage(err)
return
}
reverseProxy := &serverconfigs.ReverseProxyConfig{}
err = json.Unmarshal(reverseProxyResp.ReverseProxy, reverseProxy)
if err != nil {
this.ErrorPage(err)
return
}
this.Data["serverType"] = serverType
this.Data["reverseProxyRef"] = reverseProxyRef
this.Data["reverseProxyConfig"] = reverseProxy
primaryOriginMaps := []maps.Map{}
backupOriginMaps := []maps.Map{}
for _, originConfig := range reverseProxy.PrimaryOrigins {
m := maps.Map{
"id": originConfig.Id,
"weight": originConfig.Weight,
"addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
}
primaryOriginMaps = append(primaryOriginMaps, m)
}
for _, originConfig := range reverseProxy.BackupOrigins {
m := maps.Map{
"id": originConfig.Id,
"weight": originConfig.Weight,
"addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
}
backupOriginMaps = append(backupOriginMaps, m)
}
this.Data["primaryOrigins"] = primaryOriginMaps
this.Data["backupOrigins"] = backupOriginMaps
this.Show()
}
func (this *IndexAction) RunPost(params struct {
ServerId int64
ReverseProxyRefJSON []byte
Must *actions.Must
}) {
// TODO 校验配置
_, err := this.RPC().ServerRPC().UpdateServerReverseProxy(this.AdminContext(), &pb.UpdateServerReverseProxyRequest{
ServerId: params.ServerId,
ReverseProxyJSON: params.ReverseProxyRefJSON,
})
if err != nil {
this.ErrorPage(err)
return
}
this.Success()
}

View File

@@ -14,7 +14,7 @@ func init() {
Data("mainTab", "setting").
Data("secondMenuItem", "reverseProxy").
Prefix("/servers/server/settings/reverseProxy").
Get("", new(IndexAction)).
GetPost("", new(IndexAction)).
GetPost("/scheduling", new(SchedulingAction)).
GetPost("/updateSchedulingPopup", new(UpdateSchedulingPopupAction)).
Post("/updateOn", new(UpdateOnAction)).

View File

@@ -4,7 +4,6 @@ import (
"encoding/json"
"errors"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/serverutils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/schedulingconfigs"
@@ -21,31 +20,18 @@ func (this *SchedulingAction) Init() {
func (this *SchedulingAction) RunGet(params struct {
ServerId int64
}) {
server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId)
if !isOk {
return
}
if server.ReverseProxyId <= 0 {
// TODO 在界面上提示用户未开通,并提供开通按钮,用户点击后开通
this.WriteString("此服务尚未开通反向代理功能")
return
}
this.Data["reverseProxyId"] = server.ReverseProxyId
reverseProxyResp, err := this.RPC().ReverseProxyRPC().FindEnabledReverseProxyConfig(this.AdminContext(), &pb.FindEnabledReverseProxyConfigRequest{
ReverseProxyId: server.ReverseProxyId,
})
reverseProxyResp, err := this.RPC().ServerRPC().FindAndInitServerReverseProxyConfig(this.AdminContext(), &pb.FindAndInitServerReverseProxyConfigRequest{ServerId: params.ServerId})
if err != nil {
this.ErrorPage(err)
return
}
reverseProxy := &serverconfigs.ReverseProxyConfig{}
err = json.Unmarshal(reverseProxyResp.Config, reverseProxy)
err = json.Unmarshal(reverseProxyResp.ReverseProxy, reverseProxy)
if err != nil {
this.ErrorPage(err)
return
}
this.Data["reverseProxyId"] = reverseProxy.Id
schedulingCode := reverseProxy.FindSchedulingConfig().Code
schedulingMap := schedulingconfigs.FindSchedulingType(schedulingCode)

View File

@@ -1,8 +1,10 @@
package reverseProxy
import (
"encoding/json"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
)
type UpdateOnAction struct {
@@ -29,10 +31,21 @@ func (this *UpdateOnAction) RunPost(params struct {
this.ErrorPage(err)
return
}
reverseProxyId := resp.ReverseProxyId
_, err = this.RPC().ServerRPC().UpdateServerReverseProxy(this.AdminContext(), &pb.UpdateServerReverseProxyRequest{
ServerId: params.ServerId,
ref := &serverconfigs.ReverseProxyRef{
IsOn: true,
ReverseProxyId: reverseProxyId,
}
refJSON, err := json.Marshal(ref)
if err != nil {
this.ErrorPage(err)
return
}
_, err = this.RPC().ServerRPC().UpdateServerReverseProxy(this.AdminContext(), &pb.UpdateServerReverseProxyRequest{
ServerId: params.ServerId,
ReverseProxyJSON: refJSON,
})
if err != nil {
this.ErrorPage(err)

View File

@@ -76,9 +76,9 @@ func (this *ServerHelper) createLeftMenu(action *actions.ActionObject) {
selectedTabbar, _ := action.Data["mainTab"]
tabbar := actionutils.NewTabbar()
tabbar.Add("当前服务:"+serverConfig.Name, "", "/servers", "left long alternate arrow", false)
tabbar.Add("看板", "", "/servers/server/board?serverId="+serverIdString, "dashboard", selectedTabbar == "board")
//tabbar.Add("看板", "", "/servers/server/board?serverId="+serverIdString, "dashboard", selectedTabbar == "board")
tabbar.Add("日志", "", "/servers/server/log?serverId="+serverIdString, "history", selectedTabbar == "log")
tabbar.Add("统计", "", "/servers/server/stat?serverId="+serverIdString, "chart area", selectedTabbar == "stat")
//tabbar.Add("统计", "", "/servers/server/stat?serverId="+serverIdString, "chart area", selectedTabbar == "stat")
tabbar.Add("设置", "", "/servers/server/settings?serverId="+serverIdString, "setting", selectedTabbar == "setting")
tabbar.Add("删除", "", "/servers/server/delete?serverId="+serverIdString, "trash", selectedTabbar == "delete")