缓存绕过怎么排查缓存绕过时没有正确传递透传给后端

浅丽大大_3535

浅丽大大_3535

2026-09-20

200人浏览

原创

缓存绕过时未正确透传请求给后端,本质是边缘层跳过缓存后未完整转发原始请求头、参数及上下文,导致后端收到失真请求;需通过$upstream_cache_status为bypass确认绕过行为,对比curl响应与直连后端差异,检查proxy_pass透传配置、query string重写及cdn隐式干预。

缓存绕过怎么排查缓存绕过时没有正确传递透传给后端

缓存绕过时未正确透传请求给后端,本质是边缘层(Nginx/CDN)在决定“不缓存”后,未能将原始请求头、参数或上下文完整转发,导致后端收到失真请求——比如丢失 Cookie、篡改 User-Agent、忽略 query string 中关键字段,甚至被强制添加或删除 header。这类问题不会触发 5xx 错误,但业务逻辑会异常(如鉴权失败、分页错乱、灰度路由失效),排查需聚焦“请求变形”而非“是否缓存”。

确认绕过行为是否真实发生

先排除“误判绕过”的可能:

  • 检查 $upstream_cache_status 日志值是否为 BYPASS(不是 MISS 或 EXPIRED),BYPASS 表示 Nginx 明确执行了 proxy_pass,但跳过了缓存写入和读取逻辑
  • curl -v 对比边缘节点响应与直连后端的响应:重点关注 HTTP 状态码、响应体内容、Set-Cookie、X-Request-ID 是否一致;若后端返回 401 但边缘返回 200,大概率是鉴权头被丢弃
  • 在 Nginx 的 proxy_pass location 块中临时加日志:log_format full '$remote_addr - $request - $http_cookie - $http_authorization - $args';,对比 access_log 中记录的原始请求字段与后端实际收到的字段

检查透传配置是否遗漏关键 header

Nginx 默认不透传部分敏感 header,需显式声明:

Nginx Config Linter
Nginx Config Linter

对 Nginx 配置文件进行语法检查、验证和安全、性能审计。

下载
  • proxy_pass_request_headers on;(默认已开启,但需确认未被覆盖)
  • 必须显式透传的常见 header:Cookie、Authorization、X-Forwarded-For、X-Real-IP、X-User-ID
  • 禁用自动清理:proxy_set_header Cookie $http_cookie;(避免 proxy_hide_header Cookie 导致丢失)
  • 若后端依赖特定 UA 做设备识别,需保留:proxy_set_header User-Agent $http_user_agent;,不能留空或硬编码

验证 query string 和 body 是否被截断或重写

绕过场景下,query string 易被规则误处理,body 在非 GET 请求中可能因配置缺失而丢失:

  • 检查是否有 rewriteset $args 指令在 proxy_pass 前修改了 URI;尤其注意正则匹配中 $1 捕获是否遗漏了 query string
  • 对 POST/PUT 请求,确认未启用 proxy_buffering off; 且未设置 client_max_body_size 过小,否则大 body 会被截断并静默失败
  • 在后端入口打日志,输出 完整原始 query string 和 request body 的长度/哈希,与 Nginx access_log 中的 $args$request_body(需开启 $request_body 变量支持)比对

排查 CDN 或中间代理的隐式干预

若 Nginx 前还有 CDN 或 WAF,它们可能在绕过时自行改写请求:

  • 查看 CDN 回源日志中的 Origin-Request-Header 字段(如有),确认是否被注入额外 header(如 X-CDN-Region)或剥离了自定义 header
  • 检查 CDN 控制台“回源请求头”配置,是否存在“自动删除未声明 header”选项被开启
  • 抓包对比:从客户端发起请求 → CDN 边缘节点 → Nginx → 后端,逐层比对请求头和 body 的 SHA256 值,定位在哪一跳发生变更

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

nginx

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2003

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5370

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

4726

10

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

140

9

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

60

10

Pandas时间序列分析与可视化报表
Pandas时间序列分析与可视化报表

本专题整理Pandas日期转换、时间索引、重采样、滚动窗口、时区处理、plot绘图、Styler表格样式和报表输出方法。

2026.09.16

60

23

Pandas数据筛选索引与清洗处理
Pandas数据筛选索引与清洗处理

本专题整理Pandas中的loc、iloc、条件筛选、query查询、缺失值处理、重复值删除、类型转换和字符串列清洗方法。

2026.09.16

40

25

Pandas数据读取导入与文件导出处理
Pandas数据读取导入与文件导出处理

本专题整理Pandas读取CSV、Excel、JSON、SQL、Parquet等文件的方法,以及to_csv、to_excel、to_sql和to_parquet等常用数据导出流程。

2026.09.16

40

27

GDB怎么设置断点
GDB怎么设置断点

本专题介绍GDB按照函数名、源代码行号和文件位置设置断点的方法,详细说明run、continue、next、step等命令的配合使用,帮助定位程序崩溃、逻辑异常及代码未按预期执行的问题。

2026.09.11

360

28

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习