温馨提示×

ubuntu缓存如何配置CDN加速

小樊
34
2026-01-04 17:38:48
栏目: 云计算

Ubuntu 环境下配置缓存与 CDN 加速

一 架构与总体思路

  • 静态资源(如 JS/CSS/图片/字体)通过 CDN 分发,利用边缘节点缓存降低源站压力与时延。
  • Ubuntu 源站(Nginx/Apache)设置合理的浏览器缓存与(可选)反向代理缓存,减少回源并提升首屏速度。
  • 动态内容建议结合 Redis/Memcached 做对象缓存,并设置较短的 Cache-Control,避免数据滞后。
  • 选择支持 Brotli 压缩的 CDN,通常比 Gzip 压缩率提升约20%,进一步减少传输体积。

二 方案一 使用 CDN 加速静态资源(以 Vue/React 等前端项目为例)

  • 构建与发布
    • 前端项目执行构建(如:npm run build),生成 dist/ 静态文件目录。
  • 上传或回源
    • 方式 A:将 dist/ 上传至 对象存储(如 OSS/S3),由 CDN 直接回源到存储桶。
    • 方式 B:保持源站托管,CDN 回源到你的 Ubuntu Nginx
  • 配置 CDN 域名与缓存策略
    • 创建 CDN 加速域名,源站指向你的源站域名或存储桶地址。
    • 静态资源路径(如 /static//assets//*.js/*.css、图片后缀)设置长期缓存,例如 Cache-Control: public, max-age=31536000(一年),并开启 Brotli/Gzip 压缩。
  • 前端工程配置
    • 将资源引用指向 CDN 域名(例如:在 vue.config.js 设置 publicPath 为你的 CDN 域名)。
  • 源站 Nginx 建议
    • 对静态资源设置较长缓存,对 HTML 设置不缓存或短缓存,避免用户长期拿到旧页面:
      server {
        listen 80;
        server_name your-domain.com;
        root /path/to/dist;
        index index.html;
      
        location / {
          try_files $uri $uri/ /index.html;
          add_header Cache-Control "no-cache, must-revalidate";
        }
      
        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
          expires 1y;
          add_header Cache-Control "public, immutable";
        }
      }
      
  • 验证
    • 打开浏览器开发者工具,检查响应头是否包含 Cache-Control: max-age=31536000Content-Encoding: br/gzip,并确认资源命中 CDN(响应来自 CDN 节点)。

三 方案二 使用 Nginx 作为反向代理缓存(无独立 CDN 或做源站加速)

  • 安装与启用缓存路径
    • /etc/nginx/nginx.confhttp 块中定义共享内存与磁盘缓存路径:
      http {
        proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cdn_cache:10m
                         max_size=1g inactive=60m use_temp_path=off;
        proxy_cache_key "$scheme$request_method$host$request_uri";
      }
      
  • 站点配置示例
    • 将动态内容反向代理到上游,并启用缓存与回源控制:
      server {
        listen 80;
        server_name your-domain.com;
      
        location / {
          proxy_pass http://127.0.0.1:8080;   # 你的上游服务
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      
          proxy_cache cdn_cache;
          proxy_cache_valid 200 7d;
          proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
          add_header X-Cache-Status $upstream_cache_status;
        }
      }
      
  • 生效与验证
    • 检查配置并重启:sudo nginx -t && sudo systemctl reload nginx
    • 访问页面,查看响应头 X-Cache-Status: HIT/MISS,确认命中缓存。

四 方案三 使用 Apache2 作为反向代理缓存(可选)

  • 启用模块
    • sudo a2enmod cache cache_disk expires deflate headers proxy proxy_http
    • sudo systemctl restart apache2
  • 配置示例
    • 启用磁盘缓存与过期时间,对 /static/ 目录启用缓存:
      <IfModule mod_cache.c>
        <IfModule mod_cache_disk.c>
          CacheRoot /var/cache/apache2/mod_cache_disk
          CacheEnable disk /static/
          CacheDirLevels 2
          CacheDirLength 1
        </IfModule>
      </IfModule>
      
      <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresByType text/css "access plus 1 week"
        ExpiresByType application/javascript "access plus 1 week"
        ExpiresByType image/jpeg "access plus 1 month"
        ExpiresByType image/png "access plus 1 month"
        ExpiresByType image/gif "access plus 1 month"
      </IfModule>
      
      <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
      </IfModule>
      
      <IfModule mod_proxy.c>
        ProxyPass        / http://127.0.0.1:8080/
        ProxyPassReverse / http://127.0.0.1:8080/
      </IfModule>
      
  • 说明
    • 上述配置为示例,可按需调整缓存路径、类型与过期时间。

五 缓存策略与运维要点

  • 缓存分层
    • 浏览器缓存:静态资源设置 max-age=31536000 并标记为 public/immutableHTML 建议 no-cachemax-age=0, must-revalidate 以便快速发布更新。
    • CDN 缓存:按路径与文件类型配置长期缓存;为版本化资源(带 hash 的文件名)设置长期缓存,避免强刷。
    • 源站缓存:对热点接口/页面使用 Nginx proxy_cacheApache mod_cache_disk,设置如 proxy_cache_valid 200 7d,并使用 stale-while-revalidate 提升可用性。
  • 动态内容
    • 对价格、库存等实时性强的数据设置短缓存或不缓存;结合 Redis/Memcached 降低数据库压力。
  • 压缩与传输
    • 启用 Brotli(优先)与 Gzip,通常 Brotli 压缩率较 Gzip 提升约20%
  • 更新与失效
    • 静态资源采用文件名加 hash 或变更 CDN 目录版本 实现快速全量生效;必要时在 CDN 控制台执行目录刷新/URL 刷新
  • 监控与验证
    • 关注 命中率回源率带宽时延;使用 curl -I 或浏览器开发者工具检查 Cache-ControlAgeX-Cache-Status 等响应头。

0