5月 6, 2026 - IT, Linux    err_http2_protocol_error已关闭评论

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)

  – Laravel 日志里什么都没有(根本没到 PHP)


解决:将‘admin/firmware’路由,加入到堡塔的nginx防火墙的白名单中。

评论被关闭。