09月14, 2022

博客非 CDN 加速域名

博客原来配置了两个域名:imyoyo.xyzwww.imyoyo.xyz。两个域名均配置了腾讯云CDN动静加速,导致CDN服务器有时候会缓一些请求(不是静态资源),需要手动去控制它刷新缓存,才能得到最新的内容。非常麻烦,于是我重新弄了一个域名preview.imyoyo.xyz用于自己使用,做了鉴权处理。

鉴权处理

为什么要鉴权处理?

答:如果每个人都去访问preview.imyoyo.xyz,那么服务器的压力很大,CDN加速形同虚设。再说,preview.imyoyo.xyz是用于我增加新功能,或者写文章,能够及时查看效果的。所以针对该域名增加鉴权。

在home模块的base controller中,做一些身份验证,如果后端没有session(存储用户信息),跳转到登录模块。后端保存session,同时给域名注入cookie。

同时要针对域名进行判断,为什么是preview.imyoyo.xyz就触发鉴权逻辑。这里在后台进行了配置。

鉴权逻辑代码:


        let referrer = this.ctx.request.origin;
        if (think.isSameOrigin(referrer, preview_url) && !isDev) {
            let userInfo = (await this.session('userInfo')) || {};
            if (think.isEmpty(userInfo)) {
                return this.redirect('/admin/login');
            }
            this.userInfo = userInfo;
            if (!this.isAjax()) {
                this.assign('userInfo', { id: userInfo.id, name: userInfo.name, type: userInfo.type });
            }
        }

判断是否同源:

  isSameOrigin(referrer, site_url) {
        if (!referrer || !site_url) {
            return false;
        }
        let siteUrlHost = parse(site_url).host;
        let referrerHost = parse(referrer).host;
        if (!siteUrlHost || !referrerHost) {
            return false;
        }

        if (siteUrlHost.length < referrerHost.length) {
            if (referrerHost.slice(-siteUrlHost.length) !== siteUrlHost) {
                return false;
            }
        } else if (siteUrlHost.slice(-referrerHost.length) !== referrerHost) {
            return false;
        }
        return true;
    },

本文链接:https://imyoyo.xyz/post/blog-non-cdn-accelerated-domain.html

-- EOF --

Comments