SSO 回调时 502,error.log 写 upstream sent too big header while reading response header from upstream,普通接口正常。日志里能对上时间点,这种反而好排。

上游一次写回多个 Set-Cookie,响应头超过 proxy_buffer_size 的默认 4k 或 8k,Nginx 读完头就断开。body 大小无关,调 client_max_body_size 没用。这一点先确认清楚,后面就不用反复试。

proxy_buffer_size 16k;
proxy_buffers 8 32k;
proxy_busy_buffers_size 64k;
nginx -t && nginx -s reload

这次卡住的地方就在「proxy_buffer 太小」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。

临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

处理上按这个顺序:在对应 location 把 proxy_buffer_size 提到 16k;proxy_buffers 设 8 32k proxy_busy_buffers_size 设 64k;确认改的是命中该请求的 server 和 location;重载后用 curl -I 看响应头是否完整返回。

结果对不对很好判断,SSO 回调返回 302 而不是 502 error.log 里不再出现 too big header。

作者 9823189