mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-06 01:50:26 +08:00
实现集群自定义页面
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package nodes
|
package nodes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/utils"
|
"github.com/TeaOSLab/EdgeNode/internal/utils"
|
||||||
@@ -16,10 +17,36 @@ var urlPrefixRegexp = regexp.MustCompile("^(?i)(http|https|ftp)://")
|
|||||||
// 请求特殊页面
|
// 请求特殊页面
|
||||||
func (this *HTTPRequest) doPage(status int) (shouldStop bool) {
|
func (this *HTTPRequest) doPage(status int) (shouldStop bool) {
|
||||||
if len(this.web.Pages) == 0 {
|
if len(this.web.Pages) == 0 {
|
||||||
|
// 集群自定义页面
|
||||||
|
if this.nodeConfig != nil && this.ReqServer != nil {
|
||||||
|
var httpPagesPolicy = this.nodeConfig.FindHTTPPagesPolicyWithClusterId(this.ReqServer.ClusterId)
|
||||||
|
if httpPagesPolicy != nil && httpPagesPolicy.IsOn && len(httpPagesPolicy.Pages) > 0 {
|
||||||
|
return this.doPageLookup(httpPagesPolicy.Pages, status)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, page := range this.web.Pages {
|
// 查找当前网站自定义页面
|
||||||
|
shouldStop = this.doPageLookup(this.web.Pages, status)
|
||||||
|
if shouldStop {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 集群自定义页面
|
||||||
|
if this.nodeConfig != nil && this.ReqServer != nil {
|
||||||
|
var httpPagesPolicy = this.nodeConfig.FindHTTPPagesPolicyWithClusterId(this.ReqServer.ClusterId)
|
||||||
|
if httpPagesPolicy != nil && httpPagesPolicy.IsOn && len(httpPagesPolicy.Pages) > 0 {
|
||||||
|
return this.doPageLookup(httpPagesPolicy.Pages, status)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *HTTPRequest) doPageLookup(pages []*serverconfigs.HTTPPageConfig, status int) (shouldStop bool) {
|
||||||
|
for _, page := range pages {
|
||||||
if page.Match(status) {
|
if page.Match(status) {
|
||||||
if len(page.BodyType) == 0 || page.BodyType == shared.BodyTypeURL {
|
if len(page.BodyType) == 0 || page.BodyType == shared.BodyTypeURL {
|
||||||
if urlPrefixRegexp.MatchString(page.URL) {
|
if urlPrefixRegexp.MatchString(page.URL) {
|
||||||
|
|||||||
@@ -80,6 +80,8 @@ func (this *Node) execTask(rpcClient *rpc.RPCClient, task *pb.NodeTask) error {
|
|||||||
err = this.execUserServersStateChangedTask(rpcClient, task)
|
err = this.execUserServersStateChangedTask(rpcClient, task)
|
||||||
case "uamPolicyChanged":
|
case "uamPolicyChanged":
|
||||||
err = this.execUAMPolicyChangedTask(rpcClient)
|
err = this.execUAMPolicyChangedTask(rpcClient)
|
||||||
|
case "httpPagesPolicyChanged":
|
||||||
|
err = this.execHTTPPagesPolicyChangedTask(rpcClient)
|
||||||
case "updatingServers":
|
case "updatingServers":
|
||||||
err = this.execUpdatingServersTask(rpcClient)
|
err = this.execUpdatingServersTask(rpcClient)
|
||||||
case "plusChanged":
|
case "plusChanged":
|
||||||
@@ -187,6 +189,34 @@ func (this *Node) execUAMPolicyChangedTask(rpcClient *rpc.RPCClient) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 自定义页面策略变更
|
||||||
|
func (this *Node) execHTTPPagesPolicyChangedTask(rpcClient *rpc.RPCClient) error {
|
||||||
|
remotelogs.Println("NODE", "updating http pages policies ...")
|
||||||
|
resp, err := rpcClient.NodeRPC.FindNodeHTTPPagesPolicies(rpcClient.Context(), &pb.FindNodeHTTPPagesPoliciesRequest{})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
var httpPagesPolicyMap = map[int64]*nodeconfigs.HTTPPagesPolicy{}
|
||||||
|
for _, policy := range resp.HttpPagesPolicies {
|
||||||
|
if len(policy.HttpPagesPolicyJSON) > 0 {
|
||||||
|
var httpPagesPolicy = nodeconfigs.NewHTTPPagesPolicy()
|
||||||
|
err = json.Unmarshal(policy.HttpPagesPolicyJSON, httpPagesPolicy)
|
||||||
|
if err != nil {
|
||||||
|
remotelogs.Error("NODE", "decode http pages policy failed: "+err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
err = httpPagesPolicy.Init()
|
||||||
|
if err != nil {
|
||||||
|
remotelogs.Error("NODE", "initialize http pages policy failed: "+err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
httpPagesPolicyMap[policy.NodeClusterId] = httpPagesPolicy
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sharedNodeConfig.UpdateHTTPPagesPolicies(httpPagesPolicyMap)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// DDoS配置变更
|
// DDoS配置变更
|
||||||
func (this *Node) execDDoSProtectionChangedTask(rpcClient *rpc.RPCClient) error {
|
func (this *Node) execDDoSProtectionChangedTask(rpcClient *rpc.RPCClient) error {
|
||||||
resp, err := rpcClient.NodeRPC.FindNodeDDoSProtection(rpcClient.Context(), &pb.FindNodeDDoSProtectionRequest{})
|
resp, err := rpcClient.NodeRPC.FindNodeDDoSProtection(rpcClient.Context(), &pb.FindNodeDDoSProtectionRequest{})
|
||||||
|
|||||||
Reference in New Issue
Block a user