由于囊中羞涩,所以使用阿里云1M带宽服务器提供服务,但是访问速度十分感人,加载站点需要10多秒钟。主要原因是因为首页有大量图片资源需要加载,所有有必要使用CDN技术,对静态资源进行分发,提高页面加载速度。本文详细记录的Django项目如何使用CDN对静态资源进行加速处理的完整流程。
一、什么是CDN
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。 通俗来讲,就是存储你的站点的静态资源,然后分发到所有的边缘节点,用户在访问站点的时候,就会从就近的 CDN 节点获取资源,从而减轻服务器负载并提升网页加载速度。 举个例子,当你网上购物时,经常使用淘宝和京东,但是京东下单往往当天就可以收到快递,而淘宝需要等几天的物流。这是因为京东提前采购好商品,存放在全国各地的仓库,下单后直接从离你最近的仓库发货。而淘宝下单后,需要从厂家发货,所以京东收货速度快多了。 CDN加速也是同样的原理,开启了CDN加速可以大幅度提高网站的加载速度。
二、准备工作
- 已经备案的根域名
- 申请cdn加速域名的https证书,推荐一个免费站点(https://freessl.cn/)
- 本文使用阿里云DNS解析和华为云CDN
- 用户访问流量示意图

三、配置过程
1. 修改nginx配置文件
- 修改nginx配置文件,配置cdn加速域名server配置(配置ssl、开启目录浏览、设置资源路径别名)
- 目录浏览根据自身情况选择是否开启,开启主要是方便代码调试,修改静态资源。
server {
listen 443 ssl http2;
server_name cdn.cuiliangblog.cn;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
charset utf-8;
ssl_certificate /etc/ssl/cdn.cuiliangblog.cn_chain.crt;#.pem证书路径
ssl_certificate_key /etc/ssl/cdn.cuiliangblog.cn_key.key;#.key证书路径
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location ~* \.(eot|otf|ttf|woff|woff2|svg)$ {
root /root/myblog/;
add_header Access-Control-Allow-Origin *;
}
location /static/ {
alias /root/myblog/static/;
}
location /media/ {
alias /root/myblog/media/;
}
}
- 临时添加hosts记录,访问验证,查看cdn.cuiliangblog.cn/static/和media是否可以正常加载

2. 华为CDN配置
- 控制台——CDN——添加域名,选择源站IP,并填写服务器公网IP地址

- 配置https证书,以及缓存策略

- 复制cname域名

3. 阿里云DNS解析配置
- 添加cname记录

- 删除本地host记录,然后访问cdn.cuiliangblog.cn/static/和media是否可以正常加载
4. Django项目配置
- 修改setting.py配置文件,修改static和media地址指向cdn加速地址
# 静态文件存放位置
# STATIC_URL = '/static/'
STATIC_URL = 'https://cdn.cuiliangblog.cn/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
# 设置文件上传路径,图片上传、文件上传都会存放在此目录里
# MEDIA_URL = '/media/'
MEDIA_URL = 'https://cdn.cuiliangblog.cn/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
- 查看模板文件,修改图片资源路径
<a href="javascript:;">
<img lay-src="{{ MEDIA_URL }}{{ userinfo.photo }}" class="layui-nav-img">{{ user.username }}
</a>
四、结果验证
- 访问站点,查看文档资源请求地址

- 查看图片资源请求地址
