当前位置:首页 > 文章列表 > 文章 > 软件教程 > 开发工具 Nginx 设置缓存头 怎样处理

开发工具 Nginx 设置缓存头 怎样处理

来源:17golang原创 2026-10-22 06:49:33 0浏览 收藏

开发工具 Nginx 设置缓存头,通常不是把一条 add_header 放进任意位置就结束了。先按资源类型划分缓存策略,再把配置放在实际命中的 server 或 location 中,最后直接查看响应头,才能判断是否生效。

官方地址:https://nginx.org/

下面的示例只讨论静态资源缓存,不把登录接口、个性化接口和带敏感数据的响应放进公共缓存。

静态文件可以使用较长的 max-age,动态接口通常使用不缓存策略。配置后要以真实请求返回的响应头为准;如果嵌套的 location 重新声明了 add_header,父级同名配置可能不再按预期继承。

先确定要缓存什么

先把资源分成两组:带内容指纹的 JavaScript、CSS、字体和图片适合长缓存;HTML、接口 JSON 或会随用户变化的内容则应缩短缓存,必要时直接禁止缓存。这样做比给整个站点统一加一个月的缓存时间更容易回滚。

资源建议方向核对重点
带版本文件名的静态资源public, max-age=31536000, immutable文件名变更后再发布新内容
普通静态文件短一些的 max-age更新后是否能及时看到新文件
动态接口和 HTMLno-cache 或按业务设置不能把用户数据放进公共缓存

在正确作用域设置缓存头

静态文件可以单独放在资源路径的 location 中。下面的配置使用 Nginx 原生的 add_header,并保留中文注释说明资源边界;expires 会同时参与 Expires 和 Cache-Control 的生成。

server {
    listen 80;

    # 只给带指纹的静态资源设置较长缓存,避免影响接口响应
    location ~* \.(?:css|js|png|jpg|jpeg|gif|svg|woff2)$ {
        # 让浏览器和共享缓存保存一年,发布时用新文件名刷新内容
        add_header Cache-Control "public, max-age=31536000, immutable";
        expires 365d;
    }

    # 动态页面不沿用静态资源的缓存策略
    location /api/ {
        add_header Cache-Control "no-cache";
        expires -1;
        proxy_pass http://app_backend;
    }
}
Nginx 静态资源缓存头配置入口与作用域的原创界面说明图
图1:操作示意图,查看静态资源 location、缓存字段和作用域之间的配置关系;这是原创说明图,不是软件截图。

这里的关键不是把两个指令机械地复制到所有路径,而是让静态资源和动态接口进入不同的匹配范围。add_header 默认只对一组指定状态码添加响应头;如果错误响应也必须带上该字段,可以按需加上 always,但要先确认这符合你的错误页策略。

保存后重新加载,再核对返回头

改完配置后,使用部署环境已有的配置检查和重新加载流程。示例命令只展示操作意图,不代表本文在本机执行过:

# 先检查配置语法,再让工作进程加载新配置
nginx -t
nginx -s reload

随后请求一个明确的静态文件,重点看响应头而不是只看页面是否能打开:

# 只查看响应头,便于确认缓存策略和过期时间
curl -I https://example.com/assets/app.js

预期可以看到类似下面的字段。具体日期会随请求时间变化,判断时优先看缓存策略和资源类型是否匹配:

HTTP/1.1 200 OK
Cache-Control: public, max-age=31536000, immutable
Expires: Tue, 22 Oct 2027 00:00:00 GMT
Nginx 响应头中 Cache-Control 与 Expires 的结果核对原创界面说明图
图2:结果示意图,核对请求状态、Cache-Control、Expires 和嵌套作用域提醒;这是原创说明图,不是运行截图。

缓存头不生效时先查这几处

一是匹配范围不对。 请求路径没有进入预期的 location,配置自然不会出现。先对照请求 URL 和资源后缀,再看实际命中的 server 配置。

二是被子级配置改变了继承。 Nginx 的 add_header 有继承规则:当前层一旦声明了自己的 add_header,父层的声明不一定继续生效。尤其要检查正则 location、代理路径和专门处理错误页的配置。

三是状态码不在默认范围。 默认情况下,add_header 并不是对所有状态码都生效。若只在 404 或 500 响应上看结果,不能直接据此判断静态资源配置失败。

四是上游响应头参与了最终结果。 反向代理场景里还要看上游是否返回了自己的缓存字段,以及 Nginx 是否在代理层修改或隐藏了它们。最终判断仍以客户端收到的响应头为准。

相关问题

为什么浏览器仍然请求静态文件?缓存头只影响缓存复用,不保证浏览器永远不发请求;资源可能被手动刷新、缓存已过期,或请求带有重新验证条件。

expires 365d 和手写 Cache-Control 会冲突吗?它们分别参与不同的响应头生成。若手写策略与过期时间表达的意图不一致,先统一缓存目标,再保留最容易核对的一组配置。

什么时候不应该设置 public?含用户身份、权限结果或个性化数据的响应不要直接按公共缓存处理,应结合接口语义选择 private、no-cache 或完全不缓存。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
AI 工具调用接回多轮对话 怎样处理AI 工具调用接回多轮对话 怎样处理
上一篇
AI 工具调用接回多轮对话 怎样处理
开发工具 DBeaver 导出字段名 怎样处理
下一篇
开发工具 DBeaver 导出字段名 怎样处理
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    586次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    622次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    656次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    622次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    438次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码