err_http2_protocol_error
err_http2_protocol_error了。
laravel+nginx+php7保存上传一个13M的cpio文件时报错:
1:通过NGINX的最大文件限制大小查看和php上传的最大文件限制均大于100M,那表示不是大小限制的问题,
2:通过对Nginx日志的查询:POST /admin/firmware HTTP/2.0" 444 0
"https://bm-staging.timemore.cn/admin/firmware/create" "Mozilla/5.0
(Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/116.0.0.0 Safari/537.36
发现返回码是444
分析:关键信息出来了 — 状态码 444。这不是 PHP/Laravel 的问题,根本没走到 PHP。
444 是什么
444 是 nginx 专有的 “No Response” 状态码,表示 nginx
主动关闭连接,不返回任何响应。返回 0 字节配合 HTTP/2 → 浏览器看到流被异常关闭 →
ERR_HTTP2_PROTOCOL_ERROR。
444 几乎只有两个来源:
1. nginx 配置里有 return 444; 指令(有些防 CC 配置会这么写)
2. 宝塔面板的”免费防火墙 / nginx_waf”插件拦截了请求(最常见)
宝塔的 nginx_waf 默认对 POST body 做规则匹配。.cpio 文件是二进制 cpio
归档,前几个字节可能是 070701(newc 格式)或 0x71c7,正文中也常带类似 SQL 关键字 /
shell 字符的字节序列,非常容易命中 SQL 注入 / 命令注入规则。这就解释了为什么:
– 13M cpio 必现
– 浏览器是 ERR_HTTP2_PROTOCOL_ERROR(因为 444 + HTTP/2)
解决:将‘admin/firmware’路由,加入到堡塔的nginx防火墙的白名单中。

