大屏突然 502?一次 Nginx Buffer 溢出引发的血案:upstream sent too big header

📖 背景

大屏加了用户登录功能。本地测试完美。上线后,用户一多,部分人偶尔遇到 502 Bad Gateway。

查 nginx/error.log,发现一行红字:

upstream sent too big header while reading response header from upstream。

🔍 原因

小学生版解释:

Nginx 去 Flask 那边拿快递(Response)。Nginx 手里拿了个固定大小的麻袋(Buffer),默认是 4K 大小。

现在 Flask 塞过来一堆附件(用户登录的 Cookie、很长的 JWT Token、复杂的 CORS 头),麻袋撑爆了。Nginx 兜不住,直接把快递扔地上,大喊一声"502"。

🛠 解决

调大 Nginx 的麻袋。修改 nginx.conf:

css 复制代码
location / {
    proxy_pass http://dashboard:5000;
    
    # 关键:调大缓冲区
    proxy_buffer_size 128k;           # 专门用来存 Header 的
    proxy_buffers 4 256k;             # 响应体的
    proxy_busy_buffers_size 256k;
    
    # ... 其他 header 配置
}

✅ 验证效果

nginx -t 和 nginx -s reload。

让用户重新登录刷新大屏。F12 网络面板里,502 消失,正常的 200 响应返回,Header 里的 Token 完整传递。

💣 三个坑

只加 proxy_buffers:很多人只加 proxy_buffers 4 256k;。但存 Header 的其实是 proxy_buffer_size。如果不改它,照样爆。

本地不复现:本地开发环境通常不带复杂的 Cookie 或 SSO Token,导致本地永远测不出这个错,必须上生产。

设得太大浪费内存:Buffer 设太大会吃物理内存。一般 128k 就能应付 99% 的超级大 Header,不用设到几 M。

相关推荐
打工仔折腾 AI4 小时前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化
无奈笑天下4 小时前
银河麒麟上lsblk命令教程详解
linux·运维·服务器·数据库
fengkai45454 小时前
Prometheus+K8s弹性伸缩综合项目
运维·kubernetes·k8s·prometheus·hpa·vpa
分布式存储与RustFS6 小时前
镜像仓库的层别只堆本地盘:用 RustFS 给 Harbor 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
雪落漂泊8 小时前
Liunux进程(七):程序控制篇(中)
linux·运维·windows
分布式存储与RustFS8 小时前
工作流脚本和依赖 JAR 散在各节点本地盘:用 DolphinScheduler 资源中心接到 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
分布式存储与RustFS1 天前
群晖 NAS 被 C3RB3R 锁了:本地备份一起被加密,RustFS 对象锁为什么删不掉
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
真好啊又活了一天1 天前
服务器和虚机配置IPV6
运维·服务器·github
zixu_star1 天前
定时任务是什么?从日常自动化到 AI 应用,软件如何自动执行任务?
运维·人工智能·自动化
AR-26710-1 天前
Linux Day33——定时任务+lvm
linux·运维