mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-03 12:20:28 +08:00
缓存设置中可以设置缓存主域名,用来复用多域名下的缓存
This commit is contained in:
@@ -53,12 +53,16 @@ func (this *IndexAction) RunPost(params struct {
|
|||||||
defer this.CreateLogInfo(codes.ServerCache_LogUpdateCacheSettings, params.WebId)
|
defer this.CreateLogInfo(codes.ServerCache_LogUpdateCacheSettings, params.WebId)
|
||||||
|
|
||||||
// 校验配置
|
// 校验配置
|
||||||
cacheConfig := &serverconfigs.HTTPCacheConfig{}
|
var cacheConfig = &serverconfigs.HTTPCacheConfig{}
|
||||||
err := json.Unmarshal(params.CacheJSON, cacheConfig)
|
err := json.Unmarshal(params.CacheJSON, cacheConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 分组不支持主域名
|
||||||
|
cacheConfig.Key = nil
|
||||||
|
|
||||||
err = cacheConfig.Init()
|
err = cacheConfig.Init()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.Fail("检查配置失败:" + err.Error())
|
this.Fail("检查配置失败:" + err.Error())
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/utils"
|
"github.com/TeaOSLab/EdgeAdmin/internal/utils"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
||||||
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/dns/domains/domainutils"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao"
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||||
@@ -12,6 +13,7 @@ import (
|
|||||||
"github.com/iwind/TeaGo/actions"
|
"github.com/iwind/TeaGo/actions"
|
||||||
"github.com/iwind/TeaGo/maps"
|
"github.com/iwind/TeaGo/maps"
|
||||||
"github.com/iwind/TeaGo/types"
|
"github.com/iwind/TeaGo/types"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type IndexAction struct {
|
type IndexAction struct {
|
||||||
@@ -92,6 +94,48 @@ func (this *IndexAction) RunPost(params struct {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查Key
|
||||||
|
if cacheConfig.Key != nil && cacheConfig.Key.IsOn {
|
||||||
|
if cacheConfig.Key.Scheme != "http" && cacheConfig.Key.Scheme != "https" {
|
||||||
|
this.Fail("缓存主域名协议只能是http或者https")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(cacheConfig.Key.Host) == 0 {
|
||||||
|
this.Fail("请输入缓存主域名")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
cacheConfig.Key.Host = strings.ToLower(strings.TrimSuffix(cacheConfig.Key.Host, "/"))
|
||||||
|
if !domainutils.ValidateDomainFormat(cacheConfig.Key.Host) {
|
||||||
|
this.Fail("请输入正确的缓存主域名")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查域名所属
|
||||||
|
serverIdResp, err := this.RPC().HTTPWebRPC().FindServerIdWithHTTPWebId(this.AdminContext(), &pb.FindServerIdWithHTTPWebIdRequest{HttpWebId: params.WebId})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var serverId = serverIdResp.ServerId
|
||||||
|
if serverId <= 0 {
|
||||||
|
this.Fail("找不到要操作的网站")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
existServerNameResp, err := this.RPC().ServerRPC().CheckServerNameInServer(this.AdminContext(), &pb.CheckServerNameInServerRequest{
|
||||||
|
ServerId: serverId,
|
||||||
|
ServerName: cacheConfig.Key.Host,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !existServerNameResp.Exists {
|
||||||
|
this.Fail("域名 '" + cacheConfig.Key.Host + "' 在当前网站中并未绑定,不能作为缓存主域名")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
err = cacheConfig.Init()
|
err = cacheConfig.Init()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.Fail("检查配置失败:" + err.Error())
|
this.Fail("检查配置失败:" + err.Error())
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/utils"
|
"github.com/TeaOSLab/EdgeAdmin/internal/utils"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
||||||
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/dns/domains/domainutils"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao"
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||||
@@ -11,6 +12,7 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
||||||
"github.com/iwind/TeaGo/actions"
|
"github.com/iwind/TeaGo/actions"
|
||||||
"github.com/iwind/TeaGo/maps"
|
"github.com/iwind/TeaGo/maps"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type IndexAction struct {
|
type IndexAction struct {
|
||||||
@@ -71,12 +73,55 @@ func (this *IndexAction) RunPost(params struct {
|
|||||||
defer this.CreateLogInfo(codes.ServerCache_LogUpdateCacheSettings, params.WebId)
|
defer this.CreateLogInfo(codes.ServerCache_LogUpdateCacheSettings, params.WebId)
|
||||||
|
|
||||||
// 校验配置
|
// 校验配置
|
||||||
cacheConfig := &serverconfigs.HTTPCacheConfig{}
|
var cacheConfig = &serverconfigs.HTTPCacheConfig{}
|
||||||
err := json.Unmarshal(params.CacheJSON, cacheConfig)
|
err := json.Unmarshal(params.CacheJSON, cacheConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查Key
|
||||||
|
if cacheConfig.Key != nil && cacheConfig.Key.IsOn {
|
||||||
|
if cacheConfig.Key.Scheme != "http" && cacheConfig.Key.Scheme != "https" {
|
||||||
|
this.Fail("缓存主域名协议只能是http或者https")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(cacheConfig.Key.Host) == 0 {
|
||||||
|
this.Fail("请输入缓存主域名")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
cacheConfig.Key.Host = strings.ToLower(strings.TrimSuffix(cacheConfig.Key.Host, "/"))
|
||||||
|
if !domainutils.ValidateDomainFormat(cacheConfig.Key.Host) {
|
||||||
|
this.Fail("请输入正确的缓存主域名")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查域名所属
|
||||||
|
serverIdResp, err := this.RPC().HTTPWebRPC().FindServerIdWithHTTPWebId(this.AdminContext(), &pb.FindServerIdWithHTTPWebIdRequest{HttpWebId: params.WebId})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var serverId = serverIdResp.ServerId
|
||||||
|
if serverId <= 0 {
|
||||||
|
this.Fail("找不到要操作的网站")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
existServerNameResp, err := this.RPC().ServerRPC().CheckServerNameInServer(this.AdminContext(), &pb.CheckServerNameInServerRequest{
|
||||||
|
ServerId: serverId,
|
||||||
|
ServerName: cacheConfig.Key.Host,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !existServerNameResp.Exists {
|
||||||
|
this.Fail("域名 '" + cacheConfig.Key.Host + "' 在当前网站中并未绑定,不能作为缓存主域名")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
err = cacheConfig.Init()
|
err = cacheConfig.Init()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.Fail("检查配置失败:" + err.Error())
|
this.Fail("检查配置失败:" + err.Error())
|
||||||
|
|||||||
@@ -19,11 +19,21 @@ Vue.component("http-cache-config-box", {
|
|||||||
cacheConfig.cacheRefs = []
|
cacheConfig.cacheRefs = []
|
||||||
}
|
}
|
||||||
|
|
||||||
var maxBytes = null
|
let maxBytes = null
|
||||||
if (this.vCachePolicy != null && this.vCachePolicy.maxBytes != null) {
|
if (this.vCachePolicy != null && this.vCachePolicy.maxBytes != null) {
|
||||||
maxBytes = this.vCachePolicy.maxBytes
|
maxBytes = this.vCachePolicy.maxBytes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// key
|
||||||
|
if (cacheConfig.key == null) {
|
||||||
|
// use Vue.set to activate vue events
|
||||||
|
Vue.set(cacheConfig, "key", {
|
||||||
|
isOn: false,
|
||||||
|
scheme: "https",
|
||||||
|
host: ""
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
cacheConfig: cacheConfig,
|
cacheConfig: cacheConfig,
|
||||||
moreOptionsVisible: false,
|
moreOptionsVisible: false,
|
||||||
@@ -31,7 +41,9 @@ Vue.component("http-cache-config-box", {
|
|||||||
maxBytes: maxBytes,
|
maxBytes: maxBytes,
|
||||||
|
|
||||||
searchBoxVisible: false,
|
searchBoxVisible: false,
|
||||||
searchKeyword: ""
|
searchKeyword: "",
|
||||||
|
|
||||||
|
keyOptionsVisible: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
@@ -106,6 +118,44 @@ Vue.component("http-cache-config-box", {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
<tbody v-show="isOn() && !vIsGroup">
|
||||||
|
<tr>
|
||||||
|
<td>缓存主域名</td>
|
||||||
|
<td>
|
||||||
|
<div v-show="!cacheConfig.key.isOn">默认 <a href="" @click.prevent="keyOptionsVisible = !keyOptionsVisible"><span class="small">[修改]</span></a></div>
|
||||||
|
<div v-show="cacheConfig.key.isOn">使用主域名:{{cacheConfig.key.scheme}}://{{cacheConfig.key.host}} <a href="" @click.prevent="keyOptionsVisible = !keyOptionsVisible"><span class="small">[修改]</span></a></div>
|
||||||
|
<div v-show="keyOptionsVisible" style="margin-top: 1em">
|
||||||
|
<div class="ui divider"></div>
|
||||||
|
<table class="ui table definition">
|
||||||
|
<tr>
|
||||||
|
<td class="title">启用主域名</td>
|
||||||
|
<td><checkbox v-model="cacheConfig.key.isOn"></checkbox>
|
||||||
|
<p class="comment">启用主域名后,所有缓存键值中的协议和域名部分都会修改为主域名,用来实现缓存不区分域名。</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr v-show="cacheConfig.key.isOn">
|
||||||
|
<td>主域名 *</td>
|
||||||
|
<td>
|
||||||
|
<div class="ui fields inline">
|
||||||
|
<div class="ui field">
|
||||||
|
<select class="ui dropdown" v-model="cacheConfig.key.scheme">
|
||||||
|
<option value="https">https://</option>
|
||||||
|
<option value="http">http://</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<input type="text" v-model="cacheConfig.key.host" placeholder="example.com" @keyup.enter="keyOptionsVisible = false" @keypress.enter.prevent="1"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="comment">此域名<strong>必须</strong>是当前网站已绑定域名,在刷新缓存时也需要使用此域名。</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<button class="ui button tiny" type="button" @click.prevent="keyOptionsVisible = false">完成</button>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
<tbody v-show="isOn()">
|
<tbody v-show="isOn()">
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
@@ -164,6 +214,11 @@ Vue.component("http-cache-config-box", {
|
|||||||
<http-cache-stale-config :v-cache-stale-config="cacheConfig.stale" @change="changeStale"></http-cache-stale-config>
|
<http-cache-stale-config :v-cache-stale-config="cacheConfig.stale" @change="changeStale"></http-cache-stale-config>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div v-show="isOn()">
|
||||||
|
<submit-btn></submit-btn>
|
||||||
|
<div class="ui divider"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div v-show="isOn()" style="margin-top: 1em">
|
<div v-show="isOn()" style="margin-top: 1em">
|
||||||
<h4 style="position: relative">缓存条件 <a href="" style="font-size: 0.8em" @click.prevent="$refs.cacheRefsConfigBoxRef.addRef(false)">[添加]</a> <a href="" style="font-size: 0.8em" @click.prevent="showSearchBox" v-show="!searchBoxVisible">[搜索]</a>
|
<h4 style="position: relative">缓存条件 <a href="" style="font-size: 0.8em" @click.prevent="$refs.cacheRefsConfigBoxRef.addRef(false)">[添加]</a> <a href="" style="font-size: 0.8em" @click.prevent="showSearchBox" v-show="!searchBoxVisible">[搜索]</a>
|
||||||
<div class="ui input small right labeled" style="position: absolute; top: -0.4em; margin-left: 0.5em; zoom: 0.9" v-show="searchBoxVisible">
|
<div class="ui input small right labeled" style="position: absolute; top: -0.4em; margin-left: 0.5em; zoom: 0.9" v-show="searchBoxVisible">
|
||||||
|
|||||||
Reference in New Issue
Block a user