diff --git a/internal/web/actions/default/servers/server/settings/locations/reverseProxy/index.go b/internal/web/actions/default/servers/server/settings/locations/reverseProxy/index.go index bf09d3bc..070c7d8e 100644 --- a/internal/web/actions/default/servers/server/settings/locations/reverseProxy/index.go +++ b/internal/web/actions/default/servers/server/settings/locations/reverseProxy/index.go @@ -54,22 +54,30 @@ func (this *IndexAction) RunGet(params struct { primaryOriginMaps := []maps.Map{} backupOriginMaps := []maps.Map{} for _, originConfig := range reverseProxy.PrimaryOrigins { + if len(originConfig.Domains) == 0 { + originConfig.Domains = []string{} + } m := maps.Map{ - "id": originConfig.Id, - "weight": originConfig.Weight, - "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, - "name": originConfig.Name, - "isOn": originConfig.IsOn, + "id": originConfig.Id, + "weight": originConfig.Weight, + "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, + "name": originConfig.Name, + "isOn": originConfig.IsOn, + "domains": originConfig.Domains, } primaryOriginMaps = append(primaryOriginMaps, m) } for _, originConfig := range reverseProxy.BackupOrigins { + if len(originConfig.Domains) == 0 { + originConfig.Domains = []string{} + } m := maps.Map{ - "id": originConfig.Id, - "weight": originConfig.Weight, - "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, - "name": originConfig.Name, - "isOn": originConfig.IsOn, + "id": originConfig.Id, + "weight": originConfig.Weight, + "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, + "name": originConfig.Name, + "isOn": originConfig.IsOn, + "domains": originConfig.Domains, } backupOriginMaps = append(backupOriginMaps, m) } diff --git a/internal/web/actions/default/servers/server/settings/origins/addPopup.go b/internal/web/actions/default/servers/server/settings/origins/addPopup.go index a7d0791b..ca07f29c 100644 --- a/internal/web/actions/default/servers/server/settings/origins/addPopup.go +++ b/internal/web/actions/default/servers/server/settings/origins/addPopup.go @@ -56,6 +56,8 @@ func (this *AddPopupAction) RunPost(params struct { MaxIdleConns int32 IdleTimeout int + DomainsJSON []byte + Description string IsOn bool @@ -121,6 +123,15 @@ func (this *AddPopupAction) RunPost(params struct { return } + var domains = []string{} + if len(params.DomainsJSON) > 0 { + err = json.Unmarshal(params.DomainsJSON, &domains) + if err != nil { + this.ErrorPage(err) + return + } + } + createResp, err := this.RPC().OriginRPC().CreateOrigin(this.AdminContext(), &pb.CreateOriginRequest{ Name: params.Name, Addr: &pb.NetworkAddress{ @@ -136,6 +147,7 @@ func (this *AddPopupAction) RunPost(params struct { IdleTimeoutJSON: idleTimeoutJSON, MaxConns: params.MaxConns, MaxIdleConns: params.MaxIdleConns, + Domains: domains, }) if err != nil { this.ErrorPage(err) diff --git a/internal/web/actions/default/servers/server/settings/origins/updatePopup.go b/internal/web/actions/default/servers/server/settings/origins/updatePopup.go index 223bd680..0c349405 100644 --- a/internal/web/actions/default/servers/server/settings/origins/updatePopup.go +++ b/internal/web/actions/default/servers/server/settings/origins/updatePopup.go @@ -76,6 +76,10 @@ func (this *UpdatePopupAction) RunGet(params struct { idleTimeout = types.Int(config.IdleTimeout.Count) } + if len(config.Domains) == 0 { + config.Domains = []string{} + } + this.Data["origin"] = maps.Map{ "id": config.Id, "protocol": config.Addr.Protocol, @@ -89,6 +93,7 @@ func (this *UpdatePopupAction) RunGet(params struct { "idleTimeout": idleTimeout, "maxConns": config.MaxConns, "maxIdleConns": config.MaxIdleConns, + "domains": config.Domains, } this.Show() @@ -110,6 +115,8 @@ func (this *UpdatePopupAction) RunPost(params struct { MaxIdleConns int32 IdleTimeout int + DomainsJSON []byte + Description string IsOn bool @@ -175,6 +182,15 @@ func (this *UpdatePopupAction) RunPost(params struct { return } + var domains = []string{} + if len(params.DomainsJSON) > 0 { + err = json.Unmarshal(params.DomainsJSON, &domains) + if err != nil { + this.ErrorPage(err) + return + } + } + _, err = this.RPC().OriginRPC().UpdateOrigin(this.AdminContext(), &pb.UpdateOriginRequest{ OriginId: params.OriginId, Name: params.Name, @@ -191,6 +207,7 @@ func (this *UpdatePopupAction) RunPost(params struct { IdleTimeoutJSON: idleTimeoutJSON, MaxConns: params.MaxConns, MaxIdleConns: params.MaxIdleConns, + Domains: domains, }) if err != nil { this.ErrorPage(err) diff --git a/internal/web/actions/default/servers/server/settings/reverseProxy/index.go b/internal/web/actions/default/servers/server/settings/reverseProxy/index.go index 71905979..c5447886 100644 --- a/internal/web/actions/default/servers/server/settings/reverseProxy/index.go +++ b/internal/web/actions/default/servers/server/settings/reverseProxy/index.go @@ -53,22 +53,30 @@ func (this *IndexAction) RunGet(params struct { primaryOriginMaps := []maps.Map{} backupOriginMaps := []maps.Map{} for _, originConfig := range reverseProxy.PrimaryOrigins { + if len(originConfig.Domains) == 0 { + originConfig.Domains = []string{} + } m := maps.Map{ - "id": originConfig.Id, - "weight": originConfig.Weight, - "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, - "name": originConfig.Name, - "isOn": originConfig.IsOn, + "id": originConfig.Id, + "weight": originConfig.Weight, + "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, + "name": originConfig.Name, + "isOn": originConfig.IsOn, + "domains": originConfig.Domains, } primaryOriginMaps = append(primaryOriginMaps, m) } for _, originConfig := range reverseProxy.BackupOrigins { + if len(originConfig.Domains) == 0 { + originConfig.Domains = []string{} + } m := maps.Map{ - "id": originConfig.Id, - "weight": originConfig.Weight, - "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, - "name": originConfig.Name, - "isOn": originConfig.IsOn, + "id": originConfig.Id, + "weight": originConfig.Weight, + "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, + "name": originConfig.Name, + "isOn": originConfig.IsOn, + "domains": originConfig.Domains, } backupOriginMaps = append(backupOriginMaps, m) } diff --git a/web/public/js/components/server/domains-box.js b/web/public/js/components/server/domains-box.js new file mode 100644 index 00000000..4763d4d2 --- /dev/null +++ b/web/public/js/components/server/domains-box.js @@ -0,0 +1,90 @@ +// 域名列表 +Vue.component("domains-box", { + props: ["v-domains"], + data: function () { + let domains = this.vDomains + if (domains == null) { + domains = [] + } + return { + domains: domains, + isAdding: false, + addingDomain: "" + } + }, + methods: { + add: function () { + this.isAdding = true + let that = this + setTimeout(function () { + that.$refs.addingDomain.focus() + }, 100) + }, + confirm: function () { + let that = this + + // 删除其中的空格 + this.addingDomain = this.addingDomain.replace(/\s/g, "") + + if (this.addingDomain.length == 0) { + teaweb.warn("请输入要添加的域名", function () { + that.$refs.addingDomain.focus() + }) + return + } + + + // 基本校验 + if (this.addingDomain[0] == "~") { + let expr = this.addingDomain.substring(1) + try { + new RegExp(expr) + } catch (e) { + teaweb.warn("正则表达式错误:" + e.message, function () { + that.$refs.addingDomain.focus() + }) + return + } + } + + this.domains.push(this.addingDomain) + this.cancel() + }, + remove: function (index) { + this.domains.$remove(index) + }, + cancel: function () { + this.isAdding = false + this.addingDomain = "" + } + }, + template: `
支持普通域名(
数字越大,代表分配的请求比例越多。
-需要指定域名生效的时候才需要添加。
+数字越大,代表分配的请求比例越多。
+{{addrError}}源站服务器地址,通常是一个IP(或域名)加端口,不需要加 http:// 或 https://。
数字越大,代表分配的请求比例越多。
-需要指定域名生效的时候才需要添加。
+数字越大,代表分配的请求比例越多。
+