网购秒杀场景下静态资源需四层加速:浏览器端用cache-control public,max-age=31536000,immutable实现不可变资源零验证;nginx用/dev/shm内存缓存hot_cache抗冷启动洪峰;系统层启用sendfile、open_file_cache与read_ahead榨干吞吐;cdn协同回源并限制ip段保障源站安全。

网购秒杀场景下,静态资源(如商品图、倒计时 JS、图标、字体)必须在毫秒级内响应,且扛住突发百万级并发。单纯靠 expires 或简单 proxy_cache 不够——要构建“浏览器强缓存 + Nginx 热点内存缓存 + 零拷贝传输 + CDN 协同”的四层加速链。
浏览器端:不可变资源彻底跳过验证
所有带哈希指纹的静态资源(如 countdown.8f3e2a.js、product.e9b1d4.jpg)必须声明不可变性:
-
配置方式:在匹配后缀的
location块中统一加头:add_header Cache-Control "public, max-age=31536000, immutable"; -
效果:浏览器永不发起
If-None-Match或If-Modified-Since请求,首字节延迟压到 1–3ms - 前提:前端构建必须生成带内容哈希的文件名,确保 URL 变则内容必变
Nginx 内存级热点缓存:抗住冷启动洪峰
秒杀开始瞬间大量请求击中未缓存资源,磁盘缓存有 IO 延迟。需用内存缓存兜底最热的几类资源:
-
单独定义内存缓存区:
proxy_cache_path /dev/shm/nginx_hotcache levels=1 keys_zone=hot_cache:50m max_size=2g inactive=10m use_temp_path=off; -
精准命中热点路径(如首屏资源):
location ~ ^/(images/hero|js/countdown|fonts/).+\.(js|css|webp|woff2)$ {<br> proxy_cache hot_cache;<br> proxy_cache_valid 200 304 24h;<br> proxy_cache_lock on;<br> proxy_cache_background_update on;<br> } -
关键保护:
proxy_cache_lock防止缓存击穿,background_update让旧缓存持续服务,后台静默刷新
系统与传输层:榨干单机吞吐极限
高并发下,每微秒都关键。绕过用户态、复用句柄、预读数据:
-
零拷贝强制启用:
sendfile on; tcp_nopush on; tcp_nodelay off;(大文件用nopush,小响应可关) -
文件句柄极致复用:
open_file_cache max=50000 inactive=10s; open_file_cache_valid 20s; open_file_cache_min_uses 3;
秒杀资源访问频次极高,设低阈值快速入缓存 -
大图/视频预加载:
location ~* \.(jpg|png|webp|mp4)$ { read_ahead 2m; },减少磁盘寻道
CDN 与回源协同:分散压力,隐藏源站
不把所有鸡蛋放在一台 Nginx 上。CDN 是第一道分流阀:
-
回源头精简:只传必要字段,避免缓存键膨胀
proxy_set_header Host $host;<br> proxy_set_header X-Real-IP $remote_addr;<br> proxy_hide_header X-Powered-By;
-
CDN 缓存策略对齐:Nginx 返回
Cache-Control: public, max-age=31536000,CDN 自动识别并长期缓存 -
源站保护:仅允许 CDN IP 段回源,其他请求直接 403:
allow 203.205.128.0/17; # 阿里云 CDN 段<br> deny all;











