在使用京东云CDN提速静态资源时,Nginx的缓存策略优化可以显著提升性能并减少源站负载。以下是一些优化建议:
1. 合理设置缓存时间
- 静态资源(如图片、CSS、JS、字体文件等)通常更新频率较低,可以设置较长的缓存时间。
- 在Nginx配置中,使用
expires指令设置缓存时间:location ~* .(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg)$ { expires 365d; # 缓存1年 add_header Cache-Control "public, max-age=31536000"; # 兼容HTTP/1.1 } - 对于频繁更新的资源,可以适当缩短缓存时间,例如:
location ~* .(html|json)$ { expires 1h; # 缓存1小时 add_header Cache-Control "public, max-age=3600"; }
2. 启用强缓存和协商缓存
- 强缓存:通过
Cache-Control和Expires头实现,客户端直接从本地缓存读取资源。 - 协商缓存:通过
ETag或Last-Modified头实现,客户端向服务器验证资源是否更新。 - 在Nginx中启用
ETag和Last-Modified:location / { etag on; # 启用ETag if_modified_since exact; # 精确匹配Last-Modified }
3. 避免缓存动态内容
- 动态内容(如API接口、用户个性化数据)不应缓存,否则可能导致数据不一致。
- 在Nginx中禁用缓存:
location /api/ { add_header Cache-Control "no-cache, no-store, must-revalidate"; # 禁用缓存 expires 0; }
4. 使用proxy_cache模块缓存CDN回源内容
- 如果Nginx作为源站服务器,可以使用
proxy_cache模块缓存CDN回源的内容,减少源站压力。 -
配置示例:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { location / { proxy_cache my_cache; proxy_cache_valid 200 302 10m; # 缓存200和302状态码的内容10分钟 proxy_cache_valid 404 1m; # 缓存404状态码的内容1分钟 proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; add_header X-Cache-Status $upstream_cache_status; # 添加缓存状态头 proxy_pass http://backend; } }
5. 优化缓存键(Cache Key)
- 确保缓存键的唯一性,避免缓存冲突。
- 例如,根据URL和查询参数生成缓存键:
proxy_cache_key $scheme$proxy_host$request_uri$is_args$args;
6. 启用Gzip压缩
- 压缩静态资源可以减少传输时间,提升性能。
- 在Nginx中启用Gzip:
gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_min_length 1k; gzip_comp_level 6; gzip_vary on;
7. 配置CDN回源策略
- 在京东云CDN控制台,合理配置回源策略:
- 回源HOST:设置为源站域名。
- 回源协议:根据源站支持情况选择HTTP或HTTPS。
- 回源超时时间:根据业务需求设置合理的超时时间。
8. 监控和调优
- 使用京东云CDN的监控工具,分析缓存命中率、回源率等指标。
- 根据监控数据调整缓存策略,例如:
- 如果缓存命中率低,可以增加缓存时间。
- 如果回源率高,可以检查缓存规则是否合理。
9. 清理缓存
- 当静态资源更新时,及时清理CDN和Nginx缓存,确保用户访问到最新内容。
- 在京东云CDN控制台,使用“缓存刷新”功能清理指定URL或目录的缓存。
- 在Nginx中,可以通过删除缓存目录或重启服务清理缓存。
通过以上优化措施,可以显著提升静态资源的加载速度,降低源站负载,同时确保用户访问到最新的内容。
云服务器