温馨提示×

如何利用Apache配置进行CDN加速

小樊
41
2025-11-29 06:34:49
栏目: 云计算

利用 Apache 配置实现 CDN 加速

可以通过两条路线实现:一是自建边缘缓存/反向代理(Apache 作为 CDN 节点),二是接入第三方 CDN 并用 Apache 正确“对接”与观测。前者适合内网分发、边缘节点等场景,后者适合面向全球用户的公网加速。

方案一 自建 Apache 边缘缓存或反向代理 CDN

  • 启用必要模块
    启用缓存、代理及压缩等模块(Debian/Ubuntu 使用 a2enmod):
    sudo a2enmod cache cache_disk proxy proxy_http deflate headers expires
    修改后重启:sudo systemctl restart apache2。

  • 配置磁盘缓存(mod_cache_disk)
    在全局或虚拟主机中开启磁盘缓存,示例仅对静态资源目录生效:
    CacheRoot /var/cache/apache2/mod_cache_disk CacheEnable disk /static/ CacheDirLevels 2 CacheDirLength 1 CacheIgnoreHeaders Set-Cookie CacheIgnoreNoLastMod On CacheDefaultExpire 3600 CacheMaxExpire 86400 CacheLastModifiedFactor 0.5
    说明:将 /static/ 替换为你的静态资源路径;必要时可改为 CacheEnable disk / 全站缓存(谨慎设置动态内容)。

  • 设置浏览器与 CDN 可见的缓存头(mod_expires、mod_headers)
    为静态资源设置长期缓存,同时避免对带会话的资源误缓存:
    ExpiresActive On ExpiresByType text/css “access plus 1 month” ExpiresByType application/javascript “access plus 1 month” ExpiresByType image/jpeg “access plus 1 year” ExpiresByType image/png “access plus 1 year” ExpiresByType image/gif “access plus 1 year” ExpiresByType text/html “access plus 1 hour” Header set Cache-Control “max-age=31536000, public” env=!no-cache Header set Cache-Control “max-age=3600, public” env=is-html
    提示:对需要登录/个性化页面设置不缓存或短缓存策略(如通过 env 条件或 SetEnv/RequestHeader 控制)。

  • 启用压缩(mod_deflate)
    减少传输体积、提升首屏速度:
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json

  • 反向代理与负载均衡(可选)
    将 Apache 置于源站前作为反向代理,或做多源站负载均衡:

    单源站

    <VirtualHost *:80> ServerName example.com ProxyPass / http://backend-server/ ProxyPassReverse / http://backend-server/

    负载均衡

    <VirtualHost *:80> ServerName example.com ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ <Proxy balancer://mycluster> BalancerMember http://backend-1/ route=server1 BalancerMember http://backend-2/ route=server2 ProxySet lbmethod=byrequests
    说明:Proxy 模块同样可与 CacheEnable 组合,实现“边缘缓存 + 回源”。

方案二 接入第三方 CDN 并用 Apache 正确对接

  • 接入步骤
    在 CDN 控制台添加源站(你的 Apache 站点域名/IP 与端口),将域名的 DNS CNAME 指向 CDN 提供的加速域名;等待解析生效后,用户请求将先到达 CDN 边缘节点。

  • 源站 Apache 的安全与观测配置

    • 屏蔽直接 IP/非 CDN 访问(示例):
      <VirtualHost *:80> ServerName your-domain.com Require ip 192.0.2.0/24 # 仅允许 CDN 网段 Require all denied
    • 开启状态页便于排查:
      sudo a2enmod status
      <Location “/server-status”> SetHandler server-status Require host your-domain.com
    • 按需保留或调整缓存头,确保 CDN 能正确缓存静态资源(见上一节的 Expires/Headers 配置)。

验证与运维要点

  • 验证缓存是否生效
    使用 curl -I 查看响应头:
    curl -I https://your-domain.com/static/app.js
    关注 Cache-ControlExpires、以及 Age(Age>0 表示命中 CDN/代理缓存)。

  • 日志与监控
    通过 /var/log/apache2/access.logerror.log 观察命中率、回源情况与异常;必要时结合 mod_status 页面做运行时观测。

  • 常见问题与优化

    • 动态内容误缓存:对需要鉴权/会话的 URL 设置不缓存或短缓存;对静态资源使用长期缓存并配合文件名哈希。
    • 压缩与协议:启用 mod_deflate;在 *VirtualHost :443 中启用 HTTP/2(需模块与协议支持),进一步提升传输效率。

0