mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 07:40:56 +08:00 
			
		
		
		
	实现集群自定义页面
This commit is contained in:
		@@ -1,6 +1,7 @@
 | 
			
		||||
package nodes
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
 | 
			
		||||
	"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) {
 | 
			
		||||
	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
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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 len(page.BodyType) == 0 || page.BodyType == shared.BodyTypeURL {
 | 
			
		||||
				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)
 | 
			
		||||
	case "uamPolicyChanged":
 | 
			
		||||
		err = this.execUAMPolicyChangedTask(rpcClient)
 | 
			
		||||
	case "httpPagesPolicyChanged":
 | 
			
		||||
		err = this.execHTTPPagesPolicyChangedTask(rpcClient)
 | 
			
		||||
	case "updatingServers":
 | 
			
		||||
		err = this.execUpdatingServersTask(rpcClient)
 | 
			
		||||
	case "plusChanged":
 | 
			
		||||
@@ -187,6 +189,34 @@ func (this *Node) execUAMPolicyChangedTask(rpcClient *rpc.RPCClient) error {
 | 
			
		||||
	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配置变更
 | 
			
		||||
func (this *Node) execDDoSProtectionChangedTask(rpcClient *rpc.RPCClient) error {
 | 
			
		||||
	resp, err := rpcClient.NodeRPC.FindNodeDDoSProtection(rpcClient.Context(), &pb.FindNodeDDoSProtectionRequest{})
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user