温馨提示×

ubuntu缓存如何提高网站加载速度

小樊
34
2026-01-02 18:40:38
栏目: 云计算

Ubuntu 缓存优化提升网站加载速度

一 分层缓存策略概览

  • 建议采用自上而下的分层缓存:浏览器缓存 → CDN 边缘缓存 → 反向代理/页面缓存(如 Varnish/Nginx)→ 应用层数据缓存(Redis/Memcached)→ 数据库与对象存储。每一层都通过合适的 Cache-Control/ETag 与失效策略协同,既能显著降低首屏时间,又能减轻源站压力。

二 浏览器与CDN缓存配置

  • 浏览器缓存(静态资源长期缓存)
    • 对带指纹或版本号的资源设置强缓存,例如:Cache-Control: public, max-age=31536000, immutable;对 HTML、可变接口使用协商缓存(如 ETag/Last-Modified)。Nginx 示例:
      location ~* \.(js|css|png|webp|svg|woff2)$ {
        expires 365d;
        add_header Cache-Control "public, immutable";
        access_log off;
      }
      
  • CDN 边缘缓存
    • 启用 Brotli 压缩(相较 Gzip 体积更小)、开启 HTTP/2/HTTP/3、合理设置缓存规则与回源策略;优先选择覆盖目标市场的节点。对动态接口可设置较短 Cache-TTL 或交由源站控制。
  • 页面级缓存(Varnish 前置)
    • Varnish 作为反向代理前的“超级缓存层”,对可缓存内容进行整页缓存;与 Nginx 同时使用时注意缓存穿透与失效一致性,避免不同层缓存不一致导致内容错乱。

三 反向代理与应用层缓存

  • Nginx 反向代理缓存(降低后端响应时间)
    • 定义缓存区与路径,按路径/状态码设置 TTL,并开启锁与后台更新以减少“缓存击穿/雪崩”:
      http {
        proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=dynamic_cache:100m max_size=10g inactive=24h use_temp_path=off;
      
        server {
          location /api/ {
            proxy_cache dynamic_cache;
            proxy_pass http://backend;
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;
            proxy_cache_lock on;
            proxy_cache_use_stale error timeout updating;
            add_header X-Cache-Status $upstream_cache_status;
          }
        }
      }
      
    • 验证命中率:使用 curl -I 查看响应头 X-Cache-Status: HIT/MISS/EXPIRED/STALE
  • 应用层数据缓存(Redis/Memcached)
    • 缓存数据库查询结果、会话与热点对象,显著减少数据库压力。以 Memcached 为例(Ubuntu 24.04):
      sudo apt update && sudo apt install memcached
      sudo nano /etc/memcached.conf
        -m 256          # 按内存调大,如 256MB/512MB
        -p 11211
        -l 127.0.0.1     # 多机部署可改为 0.0.0.0 并配合防火墙
      sudo systemctl restart memcached
      
      # PHP 连接示例(安装扩展)
      sudo apt install php-memcached
      sudo systemctl restart apache2   # 或 php-fpm
      
    • 动态内容(如价格、库存)设置较短 TTL 或使用 Cache-Aside 模式按需失效。

四 DNS与系统层缓存

  • DNS 缓存(缩短域名解析耗时)
    • 在 Ubuntu 桌面/网关启用 dnsmasq 做本地 DNS 缓存,可明显减少重复解析的 30–60 ms 延迟:
      sudo apt install dnsmasq
      sudo sed -i 's/^#listen-address=.*/listen-address=127.0.0.1/' /etc/dnsmasq.conf
      echo "prepend domain-name-servers 127.0.0.1;" | sudo tee -a /etc/dhcp/dhclient.conf
      sudo systemctl restart dnsmasq
      
    • 验证:dig example.com(首次较高,再次应显著下降)。
  • 系统层与编译缓存
    • 定期清理无用包缓存:sudo apt clean && sudo apt autoremove;编译场景使用 ccache/sccache 复用编译结果,缩短发布与构建时间。

五 图片与传输层优化

  • 图片优化
    • 使用 WebP/AVIF、懒加载与响应式图像;工具如 Squoosh/TinyPNG 可显著减小体积(WebP 相较 PNG/JPG 常见可减约 30%,视觉无损或接近无损)。
  • 传输层优化
    • 启用 Gzip/Brotli 压缩文本资源;使用 HTTP/2/TLS 1.3 提升并发与握手效率;Nginx 示例:
      gzip on;
      gzip_types text/plain application/json application/javascript text/css;
      gzip_min_length 1024;
      gzip_comp_level 6;
      brotli on;
      listen 443 ssl http2;
      ssl_protocols TLSv1.3 TLSv1.2;
      ssl_session_cache shared:SSL:10m;
      ssl_session_timeout 1d;
      
    • 适度优化 TCP 缓冲区与本地端口范围、提升文件描述符上限,有助于高并发下的稳定传输。

0