找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2529|回复: 0

[知识库] DiscuzX接入CDN 实现动静分离/静态文件加速的方法

[复制链接]
发表于 2023-12-28 08:25:24 | 显示全部楼层 |阅读模式 来自 中国–河南–新乡
DiscuzX 接入 CDN 实现动静分离加速 需要解决以下问题:

  • 附件接入 CDN
  • JS,CSS 接入 CDN
  • staticurl 接入 CDN
  • 界面基础图片目录 {IMGDIR} 接入 CDN
  • 头像接入 CDN
  • 插件静态文件接入 CDN
基本方案是新增 一个站点,绑定域名作为 CDN 回源域名,比如 static.tecbbs.com,然后配置以上 项目 能够通过此域名访问到。然后配置 CDN 域名,比如 cdn.tecbbs.com。


附件接入CDN————须后台 关闭 后台 下载附件来路检测 , 否者图片附件无法处理
通过以下配置,使 static.tecbbs.com 能够访问附件:
location ^~ /data/attachment/ {
        root /var/www/discuz;
        expires 30d;
}

然后 DiscuzX 后台,全局 - 上传设置 - 基本设置 - 本地附件 URL 地址 中改为 CDN 链接 https://cdn.tecbbs.com/data/attachment

如果使用了远程附件,则为远程附件做 CDN 加速,并且在远程附件配置中把 远程访问 URL 改为 CDN 链接。




JS CSS接入CDN
DiscuzX 的 JS 和 CSS 会缓存到 data/cache 目录下,因此首先为此目录添加 static.tecbbs.com 域名:
location ^~ /data/cache/ {
        root /var/www/discuz;
        expires 1d;

然后到后台,全局 - 性能优化 - 服务器优化,修改 JS 文件 URL 及 CSS 文件 URL 为 CDN 链接。
——(须找到 source\function\cache\cache_setting.php文件中
writetojscache();
这一行移出 if判断结构,否者日后 将无法在dz后台更新js缓存


staticurl接入CDN
为 static/ 目录添加 static.tecbbs.com 域名:
location ^~ /static/ {
        root /var/www/discuz;
        expires 1d;

config/config_global.php 中,修改以下配置为 CDN 链接:
$_config['output']['staticurl'] = 'https://cdn.tecbbs.com/static/'

界面基础图片目录接入CDN
已经为 static/ 目录添加域名,然后界面基础图片目录可以直接修改为 CDN 链接。进入后台, 界面 - 风格管理,编辑当前使用的模板,找到 界面基础图片目录 {IMGDIR},改为 https://cdn.tecbbs.com/static/image/common

头像,插件等接入CDN
这一部分思路都类似,都使基于 Nginx sub_filter 模块来做,和 WordPress 方案类似。DiscuzX 主域名的配置中配置 sub_filter:

# cdn
sub_filter 'https://www.tecbbs.com/uc_server/data/avatar/' 'https://cdn.tecbbs.com/uc_server/data/avatar/';
# 相册cdn        
sub_filter '<img src="data/attachment/album/' '<img src="https://cdn.tecbbs.com/data/attachment/album/';        
# 插件,可根据情况为指定插件开启
sub_filter 'source/plugin/zxsq_' 'https://cdn.tecbbs.com/source/plugin/zxsq_';
sub_filter_types *;
sub_filter_once off;

然后在 static.tecbbs.com 域名下配置:
location ~ /uc_server/data/avatar/(\d\d\d)/(\d\d)/(\d\d)/(\d\d)_avatar_(.+?).jpg {
        root /var/www/discuz;
        set $avatar1 $1;
        set $avatar2 $2;
        set $avatar3 $3;
        set $avatar4 $4;
        set $avatarsize $5;
        # 用户未上传头像的情况,根据自身情况配置 @avatar
        try_files $uri @avatar;

        # 设置过期时间,否则cdn不会命中缓存
        # 对头像来说,短一些比较合适,否则用户更新头像不生效
        expires 1d;
}

location ^~ /source/plugin/ {
        root /var/www/discuz;
        expires 1d;
}

# 解决字体跨域,某些插件可能引用了字体
location ~* \.(eot|ttf|woff|woff2)$ {
        add_header Access-Control-Allow-Origin *;
        add_header accpet */*;
}

然后头像需要在 UCenter 后台设置使用静态链接调用头像。


转载自: https://www.annhe.net/article-3936.html

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-11-22 12:56 , Processed in 0.037752 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表