页面局部静态化缓存指对HTML中动态区域不缓存、静态区块或整页在特定条件下缓存,Nginx通过location分流+proxy_cache实现,如匹配/api/v1/home/featured路径启用缓存,或结合if/map控制匿名用户首页缓存,再配合浏览器缓存头达成前后端协同的局部静态化效果。

页面局部静态化缓存,指的是对整个 HTML 页面中**部分动态区域不缓存**、而将**静态区块或整页在特定条件下缓存**,常见于首页轮播图下方内容稳定但顶部导航/用户信息需实时的场景。Nginx 本身不支持“HTML 片段级缓存”,但可通过 location 分流 + 缓存策略组合 实现逻辑上的局部静态化效果。
用 location 匹配静态区块路径做独立缓存
最直接可行的方式:把可静态化的区块(如商品列表、公告栏、文章摘要)单独拆成接口或子页面,用独立 URL 路径暴露,再通过 location 精确匹配并启用缓存。
- 例如后端提供
/api/v1/home/featured返回纯 JSON 或预渲染 HTML 片段,前端用 JS 插入;Nginx 对该路径启用 proxy_cache - 配置示例:
location ^~ /api/v1/home/featured { proxy_pass http://backend; proxy_cache home_featured_cache; proxy_cache_valid 200 302 10m; proxy_cache_key "$uri $args"; add_header X-Cache-Status $upstream_cache_status; } - 关键点:
^~保证高优先级匹配,避免被正则 location 覆盖;proxy_cache_key包含$args可区分分页、分类等不同请求
用 location + if 判断文件后缀或 URI 特征控制缓存粒度
当无法改造后端接口时,可在 Nginx 层根据请求特征做条件缓存。比如只对不含用户标识参数的首页请求缓存,或对带特定标记的 HTML 路径启用缓存。
- 示例:仅缓存未登录用户的首页 HTML(无 cookie 或无 session 参数)
location = / { root /var/www/html; try_files $uri index.html; <pre class="brush:php;toolbar:false;"># 检查是否为匿名访问 if ($http_cookie !~ "sessionid|user_id") { expires 10m; add_header Cache-Control "public, max-age=600"; } # 登录用户走默认逻辑(不加缓存头)}
linux-performance-analyzer下载Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 注意:
if在 location 中可用,但不能嵌套;优先级低于=和^~,需放在匹配最精确的 location 块内 - 更稳妥做法是结合
map指令提前定义缓存开关变量,避免 if 的副作用
用命名 location + internal 实现“伪静态化”响应
对于需要服务本地 HTML 文件但又想统一走缓存流程的场景(如 CMS 生成的静态页),可用命名 location 配合 internal 和 proxy_pass 构建缓存通道。
- 配置结构:
location ^~ /static-home/ { proxy_pass http://_static_home_; proxy_cache home_static_cache; proxy_cache_valid 200 302 1h; } <p>location @static_home { internal; root /var/www/generated; try_files $uri /index.html =404; }</p> - 这样所有
/static-home/xxx.html请求都经由 proxy_cache 流程,命中后直接返回磁盘缓存,不触发文件系统读取 - 适合定期生成、变动频率低的运营页、活动页等“准静态”内容
配合浏览器缓存头实现客户端侧局部生效
服务端缓存是基础,但真正实现“局部”效果往往需前后端协同。Nginx 可针对不同资源类型设置差异化缓存头,让浏览器按需复用。
- 例如:首页 HTML 不长期缓存(防内容过期),但其中引用的 CSS/JS/图片强制强缓存
location = /index.html { root /var/www/html; add_header Cache-Control "no-cache, must-revalidate"; } location ~* \.(css|js|png|jpg|gif)$ { root /var/www/html; expires 1y; add_header Cache-Control "public, immutable"; } - 这样 HTML 每次校验更新,而静态资源长期复用——视觉上就是“页面局部静态化”:布局结构常新,样式与媒体不变
- 搭配 ETag 或 Last-Modified 可进一步减少 304 响应开销










