Debian LNMP如何使用CDN
小樊
46
2025-12-20 17:53:30
Debian LNMP接入CDN实操指南
一 架构选择与接入方式
- 推荐将CDN置于源站前,用户 → CDN → Nginx/PHP-FPM(动态内容)与静态资源由CDN就近分发,源站仅处理动态请求与回源。若需更强缓存,可在CDN与源站之间再加一层Varnish/Nginx缓存,形成:用户 → CDN → Varnish → Nginx → PHP-FPM。此分层可显著提升命中率与并发能力。对于大文件下载/媒资,选择CDN的文件下载加速业务类型更合适;若同时有点播与下载需求,需分别创建两个加速域名(一个域名仅对应一种业务类型)。CDN侧支持泛域名加速(如:*.example.com)。
二 源站Nginx关键配置
- 回源与协议
- 在server或location中设置仅允许来自CDN的回源(按需开启),并正确传递协议与客户端信息:
- 仅CDN回源示例:allow 1.2.3.4/24; deny all;
- 传递协议头:proxy_set_header X-Forwarded-Proto $scheme;
- 传递真实IP:proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- 动静分离与缓存控制
- 对静态资源设置长Cache与公共缓存策略,减少回源与带宽:
- location ~* .(jpg|jpeg|png|gif|webp|ico|svg|css|js)$ {
- expires 1y; add_header Cache-Control “public, immutable”;
- access_log off;
- }
- 对动态内容(如PHP)避免被CDN误缓存:
- location ~ .php$ { fastcgi_pass unix:/run/php/php-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param HTTPS $https if_not_empty; }
- 安全与压缩
- 开启Gzip/Brotli压缩,减少传输体积;隐藏版本信息:server_tokens off;
- 若使用HTTP/2/HTTP/3,在443端口启用相应模块与证书,提升多路复用与握手效率。
三 CDN侧配置要点
- 业务类型与源站
- 网站页面/接口:选择网站加速;大文件分发:选择文件下载加速;若两类并存,创建两个加速域名分别接入。
- 回源配置
- 回源协议建议与源站一致(HTTP/HTTPS);回源Host填源站域名;开启回源跟随301/302(可选);按需配置回源鉴权(如Token/Referer防盗链)。
- 缓存规则
- 静态资源:Cache-Control建议“public, max-age=31536000”(一年),并开启忽略查询字符串或按路径/文件后缀精细化缓存。
- 动态内容:默认不缓存或设置短TTL;对登录态/个性化接口设置不缓存与私有缓存(private)。
- 避免“缓存遵循源站”导致CDN不缓存;合理设置缓存过期时间以提升命中率。
- 预热与刷新
- 新内容上线可使用CDN预热将资源提前分发至边缘节点;内容更新后使用URL/目录刷新强制过期,保证用户就近获取最新内容。
四 上线验证与运维
- 命中率与回源
- 通过CDN控制台查看命中率/回源QPS;在响应头中加入X-Cache/CDN-Cache等标识或查看Nginx日志的X-Forwarded-For分布,确认回源来源与命中情况。
- 回源与证书
- 使用curl从CDN回源测试:curl -H “Host: your.domain” http://your.origin/;若源站启用HTTPS,确保证书链完整并开启TLS安全套件。
- 预热与刷新
- 大促/版本发布前执行预热;日常内容更新后按需刷新;对频繁变动的接口避免缓存或使用短TTL与版本化URL(如:app.js?v=20251220)。
- 日志与告警
- 源站保留访问日志与错误日志,对5xx/回源失败设置告警;定期审计CDN缓存命中与回源带宽,结合业务调整规则。