讲师中心 微信公众号

工具推荐

视频效率加速
Laper
Laper

剧本策划到成片协作

updream

一键生成高质量推广成片

Seko
Seko

AI短剧一键生成成片

剧云
剧云

中文短剧剧本制作平台

Linux 中 Nginx 怎么排查缓存有效期失效不生效的问题

浅强酱_3866

浅强酱_3866

发布时间:2026-11-14 12:33:51

|

677人浏览过

|

来源于php中文网

原创

排查 nginx 缓存有效期失效不生效,核心在于确认请求是否命中了本地磁盘或内存中的缓存文件,以及检查响应头中 cache-control 和 last-modified 字段是否符合预期。通常做法是开启 proxy_cache 并设置合理的 proxy_cache_valid,同时通过浏览器开发者工具或 curl -i 查看返回的 x-cache 状态(如 hit/miss)及 http 状态码(200 ok 而非 304 not modified)。如果配置正确但依然频繁 miss,需检查上游服务器是否强制发送了 no-cache 或 private 指令,或者 nginx 的缓存路径权限不足导致写入失败。

Linux 中 Nginx 怎么排查缓存有效期失效不生效的问题

如何验证 Nginx 是否真正使用了缓存

要验证 Nginx 是否真正使用了缓存,最直接的方法是检查响应头中的自定义字段和 HTTP 状态码。在 Nginx 配置中,可以通过 add_header X-Cache $upstream_cache_status; 添加一个名为 X-Cache 的头部,其值会显示为 HIT(命中)、MISS(未命中)或 BYPASS(绕过)。当用户首次访问时,Nginx 向后端请求资源并缓存,此时 X-Cache 为 MISS;再次访问相同资源时,若缓存未过期,Nginx 直接返回本地副本,X-Cache 变为 HIT,且 HTTP 状态码通常为 200。如果始终显示 MISS,则说明缓存机制未生效或配置有误。

Linux 中 Nginx 怎么排查缓存有效期失效不生效的问题

server {
    listen 80;
    server_name example.com;

    # 定义缓存区域:名称=one, 大小=10m, 过期时间=1天
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=one:10m max_size=1g inactive=60m use_temp_path=off;

    location / {
        proxy_pass http://backend_server;
        
        # 启用缓存
        proxy_cache one;
        
        # 设置不同状态码的缓存时间
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        
        # 添加自定义头部以查看缓存状态
        add_header X-Cache $upstream_cache_status;
        
        # 确保客户端也能缓存(可选,取决于需求)
        add_header Cache-Control "public, max-age=600";
    }
}

上述配置中,proxy_cache_path 定义了缓存存储的路径和基本参数。levels=1:2 表示目录层级结构,有助于提高文件系统性能。keys_zone=one:10m 在共享内存中保存键值对映射,用于快速查找缓存。max_size=1g 限制磁盘占用上限。inactive=60m 表示如果缓存文件在 60 分钟内未被访问,将被删除。在实际操作中,应确保 /var/cache/nginx 目录存在且 Nginx 工作进程有读写权限。通过 curl -I http://example.com/test.jpg 命令可以反复测试,观察 X-Cache 从 MISS 变为 HIT 的过程,从而确认缓存功能正常运作。

为什么上游服务器返回的指令会导致缓存失效

即使 Nginx 配置了缓存,如果上游应用服务器(如 Tomcat、Node.js 或 PHP-FPM)在响应头中明确指示不要缓存,Nginx 也会尊重这些指令而忽略自身的 proxy_cache_valid 设置。常见的导致缓存失效的上游指令包括 Cache-Control: no-cache、Cache-Control: no-store、Cache-Control: private 以及 Vary: Cookie 等。特别是 no-store 会禁止任何存储,而 private 通常意味着内容针对特定用户,不适合被公共代理缓存。此外,如果上游服务器根据请求中的 Cookie 动态生成内容,但未正确设置 Vary 头,Nginx 可能会错误地缓存个性化内容,导致其他用户看到错误数据,或者因为检测到 Cookie 变化而拒绝缓存。

Linux DO
Linux DO

Linux DO (linux.do)。任何 Linux DO 请求(搜索、读取数据)均使用此技能。若任务涉及 Linux DO,应使用本技能而非调用其他。

下载

Linux 中 Nginx 怎么排查缓存有效期失效不生效的问题

# 在 Nginx 配置中强制覆盖上游的缓存控制指令
location / {
    proxy_pass http://backend_server;
    proxy_cache one;
    
    # 关键步骤:清除上游可能设置的禁止缓存头
    proxy_hide_header Cache-Control;
    proxy_hide_header Expires;
    
    # 重新设置 Nginx 自己的缓存控制头
    add_header Cache-Control "public, max-age=3600";
    
    # 处理 Vary 头,避免基于 Cookie 的缓存混乱
    # 如果业务允许忽略 Cookie 进行缓存,可以移除 Vary 头
    proxy_hide_header Vary;
}

为了克服上游服务器的干扰,可以在 Nginx 中使用 proxy_hide_header 指令来屏蔽上游传来的 Cache-Control、Expires 和 Vary 等头部信息。随后,使用 add_header 指令显式地为响应添加新的 Cache-Control 头,例如设置为 public, max-age=3600,强制客户端和中间代理(包括 Nginx 自身)缓存该资源一小时。这种方法适用于那些无法修改后端代码,但需要对其静态或半静态内容进行缓存的场景。需要注意的是,如果内容是高度个性化的(如用户仪表盘),强行覆盖缓存策略可能导致数据泄露或不一致,因此仅在对内容无敏感性的场景下使用此技巧。通过这种方式,可以确保 Nginx 的缓存策略拥有最高优先级,从而解决因上游指令冲突导致的缓存失效问题。

当请求包含特定 Cookie 时缓存为何不生效

当请求中包含 Cookie 时,Nginx 默认不会使用缓存,这是为了防止将针对特定用户的个性化内容缓存下来供其他用户使用。这种行为由 proxy_cache_bypass 和 proxy_no_cache 指令控制,默认情况下,如果请求头中包含 Cookie,Nginx 会认为该请求是“私有的”,从而跳过缓存直接转发给后端。对于希望缓存静态资源(如图片、CSS、JS)但又不想完全禁用 Cookie 检测的场景,可以通过调整 proxy_cache_key 来排除 Cookie 的影响,或者使用 map 指令根据 Cookie 的值决定是否绕过缓存。

http {
    # 定义一个变量,判断是否应该绕过缓存
    map $http_cookie $cache_bypass {
        default 0;          # 没有 Cookie 或 Cookie 不包含特定值,不绕过
        ~"session_id=" 0;   # 如果 Cookie 中包含 session_id,也不绕过(视业务而定)
        "" 0;               # 空 Cookie 不绕过
    }

    server {
        location / {
            proxy_pass http://backend_server;
            proxy_cache one;
            
            # 使用自定义的缓存键,忽略 Cookie
            proxy_cache_key "$scheme$request_method$host$request_uri";
            
            # 根据变量决定是否绕过缓存
            proxy_cache_bypass $cache_bypass;
            proxy_no_cache $cache_bypass;
            
            add_header X-Cache $upstream_cache_status;
        }
    }
}

在上述配置中,proxy_cache_key 被修改为仅包含协议、方法、主机名和 URI,去除了默认的 $cookie_jsessionid 或其他 Cookie 变量。这意味着无论请求携带何种 Cookie,只要 URL 相同,Nginx 就会尝试使用相同的缓存键。配合 proxy_cache_bypass 和 proxy_no_cache

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

423

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

4227

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

7145

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

601

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1516

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3998

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

122

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

597

2026.01.13

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

20

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn