初次接解cdn的读者可能要问cdn服务是什么意思啊?读完这篇文章,您将明白cdn是什么意思,cdn服务在你脑海里不再是个抽象的概念,将会变成可在cdn加速服务器上可执行的步骤。

一、为什么要做 CDN 加速
网站上线之后,随着访问量的增长,单一服务器直出的方案往往会暴露出明显瓶颈:北方用户访问南方机房延迟高、图片加载慢、首屏白屏时间长。即便在服务端已经做了 Tomcat 9 的 JVM 调优(-Xms512m -Xmx1024m -XX:+UseG1GC),也无法从根本上改善跨地域访问的物理延迟问题。
CDN(Content Delivery Network,内容分发网络)的核心思路是:把静态资源缓存到离用户最近的边缘节点,动态请求则通过加速线路回源到源站。对于基于 Tomcat 9 的站点而言,接入 CDN 后,静态资源(CSS、JS、图片)几乎全部由边缘节点响应,源站只需处理少量动态请求,整体带宽成本和响应时延都会大幅下降。
本文以实际部署经验为基础,完整介绍从源站确认到 CDN 接入、回源配置、HTTPS 证书、缓存规则设置及效果验证的全流程,供有相同架构的团队参考。
二、明确源站架构
在做 CDN 接入之前,首先要清楚源站的部署结构,以便后续正确配置回源地址和回源协议。
本站的源站部署在 Linux 服务器上,使用 Tomcat 9.0.89,安装路径为 /opt/tomcat9,通过 systemd 托管:
- 服务入口:
/etc/systemd/system/tomcat.service - 启动脚本:
/opt/tomcat9/bin/startup.sh - 默认监听端口:
8080(HTTP) - JVM 参数通过
/opt/tomcat9/bin/setenv.sh统一管理
在 Tomcat 前面通常还有 Nginx 做反向代理,将 80/443 端口的流量转发到 Tomcat 8080,并在 Nginx 层处理 SSL 证书。这一结构意味着:
- CDN 回源协议可以选 HTTP(回到 Nginx 的 80 端口)或 HTTPS(回到 Nginx 的 443 端口)
- 源站 IP 只需开放给 CDN 服务商的回源 IP 段,普通公网访问应该全部走 CDN
三、选择 CDN 服务商
国内常用的 CDN 服务商有阿里云CDN、腾讯云CDN、又拍云、七牛云等,核心选型维度如下:
| 维度 | 关注点 |
|---|---|
| 节点覆盖 | 国内节点数、海外节点数 |
| 计费方式 | 流量计费 vs 带宽峰值计费 |
| 回源能力 | 支持 HTTPS 回源、SNI、自定义 Host |
| 证书管理 | 支持免费证书自动续签 |
| 刷新/预热 | URL 刷新、目录刷新 |
对于中小型企业站点,流量计费方式更合适,因为流量波峰不高,按量付费成本可控。本文以阿里云CDN为例演示配置过程,其他服务商的操作界面不同但逻辑一致。
四、域名接入 CDN
4.1 添加加速域名
登录 CDN 控制台,选择"添加域名",填写加速域名和业务类型:
- 加速域名:填写对外提供服务的域名(主站或子站)
- 业务类型:选择"图文小站"或"全站加速"
- 加速区域:按实际用户分布选择
提交后,CDN 会分配一个 CNAME 地址,格式类似 xxxxx.cdn.com.cn。
4.2 修改 DNS 解析
进入域名注册商的 DNS 控制台,将原有的 A 记录删除,改为 CNAME 记录,将域名指向上一步 CDN 分配的 CNAME 地址。DNS 生效通常需要几分钟到 10 分钟。
五、回源配置
回源配置决定了 CDN 节点在缓存未命中时如何访问源站,是整个 CDN 接入最关键的环节。
5.1 回源地址与协议
| 配置项 | 建议值 |
|---|---|
| 回源协议 | HTTP(Nginx 80 端口,内网省去 SSL 开销) |
| 回源地址 | 源站服务器公网 IP |
| 回源端口 | 80 |
| 回源 Host | 与加速域名保持一致 |
注意:回源 Host 必须与 Nginx 的 server_name 匹配,否则 Nginx 会返回默认虚拟主机的内容,导致页面错乱。
5.2 验证回源是否正常
回源配置保存后,立即在源站服务器上用 curl 模拟 CDN 回源请求,确认 Tomcat/Nginx 能正确响应:
# 验证主站回源响应
curl -I -H "Host: www.wangzhanjianshe9.com.cn" http://127.0.0.1/
# 验证子站回源响应
curl -I -H "Host: huangpu.wangzhanjianshe9.com.cn" http://127.0.0.1/
如果返回 HTTP/1.1 200 OK 并且响应头中出现了正确的 Content-Type,说明回源路径畅通。如果返回 301/302,需要检查 Nginx 是否有强制 HTTPS 跳转,必要时在 CDN 侧开启"跟随回源重定向",或者把回源协议改为 HTTPS。
六、HTTPS 证书配置
CDN 接入后,用户侧的 HTTPS 由 CDN 节点负责卸载,源站可以继续使用 HTTP 回源(内网传输),也可以配置端到端 HTTPS。
6.1 上传证书到 CDN
在 CDN 控制台的"HTTPS 配置"页面,上传域名证书的公钥(.pem 或 .crt)和私钥(.key)。上传时需要输入证书的密码(如果私钥有密码保护)。
以阿里云 CDN 为例,控制台在"证书管理 → 上传证书"中提供了一个密码输入框。若使用 Let's Encrypt 签发的证书,私钥通常不加密,密码框留空即可。若使用商业 CA 或自建 CA 签发的带密码私钥,则按实际密码填写。
对于本站而言,主站和子站分别需要独立的证书配置:
# 检查主站证书有效期
curl -vI https://www.wangzhanjianshe9.com.cn 2>&1 | grep -E "expire|subject|issuer"
# 检查子站证书有效期
curl -vI https://huangpu.wangzhanjianshe9.com.cn 2>&1 | grep -E "expire|subject|issuer"
若输出中 expire 日期距今大于 30 天,说明证书状态正常;若小于 30 天,应立即在 CDN 控制台更新证书。
6.2 开启 HSTS(可选)
HSTS(HTTP Strict Transport Security)可强制浏览器只通过 HTTPS 访问,进一步提高安全性。在 CDN 的 HTTP 头管理中添加:
Strict-Transport-Security: max-age=31536000; includeSubDomains
七、缓存规则配置
合理的缓存规则是 CDN 提速效果的核心,缓存命中率越高,回源次数越少,用户感知速度越快。
7.1 静态资源缓存
对于配置在 Tomcat 的站点,静态资源主要存放在 /export/ 导出目录和 /resources/ 资源目录,推荐按文件后缀配置缓存时间:
| 文件类型 | 缓存时长 |
|---|---|
.jpg .png .webp .gif .ico |
30 天 |
.css .js |
7 天 |
.woff .woff2 .ttf |
365 天 |
.html |
10 分钟(或不缓存) |
动态路径(*.jsp、?*) |
不缓存 |
网站静态导出文件后,CDN 缓存相应的文件可以通过 CDN 控制台的"URL 刷新"功能手动清除。
7.2 不缓存的路径
以下路径必须配置为不缓存,否则会导致用户看到过期内容:
- 所有带 Query String 的动态请求:
?cat=、?page= - Tomcat 管理路径:
/manager/ - 用户登录、表单提交等接口
八、防盗链与访问控制
CDN 加速后,静态资源的 URL 对外可访问,需要配置防盗链避免流量被滥用:
- Referer 防盗链:允许本站域名和空 Referer(直接访问),拒绝其他来源
- IP 黑白名单:可将爬虫 IP 或恶意 IP 拉入黑名单
- UA 过滤:过滤掉明显异常的 User-Agent
配置完成后,可以用 curl 模拟不同 Referer 测试防盗链效果:
# 正常请求(应返回 200)
curl -I -e "https://www.wangzhanjianshe9.com.cn" \
https://cdn.example.com/resources/images/logo.png
# 盗链请求(应返回 403)
curl -I -e "https://other-site.com" \
https://cdn.example.com/resources/images/logo.png
九、验证 CDN 加速效果
9.1 检查响应头
CDN 正确接入后,响应头中会出现 CDN 服务商添加的标识字段,如阿里云 CDN 会加上 Via 和 X-Cache 头:
curl -I https://www.wangzhanjianshe9.com.cn/resources/css/common.css
若返回类似 X-Cache: HIT 或 Via: cache 的字段,说明该次请求已命中 CDN 缓存,未回到源站。
9.2 对比前后加载时间
可以使用 curl 的 -w 参数输出详细的时间分解:
curl -o /dev/null -s -w \
"dns: %{time_namelookup}s | connect: %{time_connect}s | ttfb: %{time_starttransfer}s | total: %{time_total}s\n" \
https://www.wangzhanjianshe9.com.cn/
接入 CDN 前,TTFB(首字节时间)通常在 200ms 以上(跨省访问可能超过 500ms);接入后命中缓存的静态资源 TTFB 一般在 20ms 以内。
9.3 观察源站 Tomcat 日志
CDN 接入后,源站的访问日志量应明显减少。可以实时查看 Tomcat 访问日志:
tail -f /opt/tomcat9/logs/localhost_access_log.$(date +%Y-%m-%d).txt
如果日志中仍然有大量来自用户 IP(而非 CDN 回源 IP 段)的请求,说明 DNS CNAME 还未完全生效,或者部分用户在使用旧的 DNS 缓存直连源站。
十、日常维护注意事项
内容更新后及时刷新 CDN 缓存:Tomcat 上的 网站发布新内容后,HTML 页面变化需要手动或自动触发 CDN 刷新,否则用户看到的是旧版本。
证书到期前续签:CDN 侧的证书需要单独管理,不会随源站 Nginx 的证书自动续签而更新,建议设置日历提醒,在到期前 30 天手动更新。
源站防护:接入 CDN 后,应在源站 Nginx 或防火墙层限制只允许 CDN 回源 IP 段访问 80/443,防止攻击者绕过 CDN 直接打源站。
重启 Tomcat 后验证回源:每次执行
sudo systemctl restart tomcat重启源站服务后,应立即用回源验证命令确认服务正常,避免 CDN 回源失败导致全站 5xx。监控 CDN 流量异动:在 CDN 控制台开启流量告警,当带宽或请求数突增时及时排查是否有刷量攻击。
小结
通过以上步骤,基于 Tomcat 9 的网站可以平滑接入 CDN加速,静态资源的全球缓存分发让用户访问延迟大幅降低,源站压力也显著减轻。关键要点是:回源 Host 配置正确、缓存规则区分动静、HTTPS 证书独立管理、接入后屏蔽直连源站。做好这几点,CDN加速的效果会立竿见影。