这个故障有个很明显的特征:同一个管理员、同一个商品,在无痕窗口能保存,正常窗口点击保存立即400;PHP和Magento日志里却没有请求。清Cookie后恢复几天又复发。既然请求根本没到PHP,就先查Nginx、CDN或负载均衡,不要继续改form_key。
从响应来自哪一层开始
浏览器Network里查看Server、Via、X-Cache等Header,再对照各层错误日志。Nginx通常会记录 client sent too large header 或 request header too large;CDN和WAF可能给自己的400页面。
grep -iE "too large header|request header" /var/log/nginx/error.log | tail -50 nginx -T | grep -E "large_client_header_buffers|client_header_buffer_size"
商品保存是POST,但报错不等于请求Body太大。Cookie属于请求Header,和client_max_body_size没有关系。盲目增加上传限制不会解决。
找出是谁在不断制造Cookie
在浏览器Application面板按Size和Path排序。重点看重复的admin session、表格bookmark、调试工具、A/B测试以及错误设置到顶级域名的前台Cookie。后台路径若与前台共享域名,前台营销脚本产生的几十个Cookie也会随后台请求一起发送。
- 是否存在同名Cookie但Path不同
- 是否每次访问都新增带随机后缀的Cookie
- Cookie Domain是否误设为.example.com,导致所有子域都携带
- 过期时间是否异常长,删除逻辑是否只删了一个Path
代理限制可以调,但不要只调限制
确认业务确实需要较大Header后,在合适的server/http块调整并验证语法。数值要根据真实Header大小和内存预算确定,下面只是常见示例。
client_header_buffer_size 4k; large_client_header_buffers 4 16k; nginx -t && systemctl reload nginx
如果前面还有ALB、Ingress或CDN,它们可能有更低且不可调的上限。此时Nginx调到64k也没用,必须减少Cookie。
Magento侧要检查的配置
- Web > Default Cookie Settings中的Domain和Path是否过宽
- Admin > Security中的会话生命周期是否合理
- 是否有插件把大段JSON写进Cookie
- 后台与前台是否应该使用独立子域,减少无关Cookie携带
临时让用户清Cookie只是止痛。真正修复后,新会话连续使用数天Cookie数量应保持稳定。可以在测试环境记录每次后台导航时Cookie Header长度,发现单调增长就继续追写入源。
验证
curl -vk https://admin.example.com/ -H 'Cookie: test=1' # 同时在浏览器中保存商品、保存分类、导出列表,确认各类POST都正常
400发生在PHP之前时,Magento日志为空是正常现象。先沿请求链找出哪一层拒绝,再决定是缩短Cookie还是调整Header上限。

