啟用集群插件
紙殼CMS的集群插件默認是不啟用的,在集群部署之前應先啟用,找到集群插件ZKEACMS.Distribution目錄(開發環境:src/ZKEACMS.Distribution,生產環境:wwwroot/Plugins/ZKEACMS.Distribution)用記事本打開插件描述檔案zkea.plugin,將Enable改為true即可,
{
ID:"2995ECF6-E2C0-4DAD-97CB-D980EE75390B",
Name:"ZKEACMS.Distribution",
FileName:"ZKEACMS.Distribution.dll",
Enable:"true"
}
實作原理
紙殼CMS只需要簡單的設定就可以支持集群分布式部署,實作原理是通過將DataProtection的密鑰保存到統一的地方進行共享訪問,這樣就能在不同的機器進行相同的加密,解密操作,從而保持登錄狀態,
紙殼CMS的用戶登錄使用的是cookie認證,默認情況下,對同一臺服務器是有效的,但對別的服務器是無效的,因為加密的Key不一樣,所以集群部署的時候,DataProtection是必須要設定的,放在一個統一的地方管理,紙殼CMS啟用集群功能后,會將Key保存到資料庫的PersistKey表中,從而保證所有結點都可以訪問相同的Key,有關于了解更多DataProtection請參閱微軟官方檔案,
Microsoft doc:
- https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/introduction
- https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers
限制與擴展
因為紙殼CMS是將Key保存到資料庫中,因此要求所有結點都要訪問相同的資料庫,如果系統需要做分庫處理,可以將Key保存到外部資料庫中,如Redis,
只需要重新實作一個IPersistKeyService即可,該介面很簡單,負責Key的存取:
namespace ZKEACMS.Distribution.Service { public interface IPersistKeyService { List<PersistKey> GetPersistKeys(); void Save(PersistKey persistKey); } }
插件源代碼:https://github.com/SeriaWei/ZKEACMS/tree/develop/src/ZKEACMS.Distribution
原文鏈接:http://www.zkea.net/codesnippet/detail/zkeacms-distribution.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/197160.html
標籤:.NET Core
