当前位置: 首页 > article >正文

Git Push 失败:HTTP 413 Request Entity Too Large

Git Push 失败:HTTP 413 Request Entity Too Large 问题排查

在使用 Git 推送包含较大编译产物的项目时,你是否遇到过 HTTP 413 Request Entity Too Large 错误?这通常并不是 Git 的问题,而是 Web 服务器(如 Nginx)拒绝接收大体积请求。本文将通过一个完整案例,演示如何使用 curl 工具验证服务器限制,最终通过宝塔面板修改 Nginx 配置解决问题,实现大文件 Git 推送成功。适用于使用 Gitblit、Gitea 或任何基于 Nginx 部署的私有 Git 服务环境。


一、问题描述

在使用 Git 推送一个包含编译产物的仓库时,推送失败,报错如下:

error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413
send-pack: unexpected disconnect while reading sideband packet
fatal: the remote end hung up unexpectedly

Git GUI (SourceTree) 中显示:

POST git-receive-pack (287021804 bytes)
error: RPC failed; HTTP 413

在这里插入图片描述


二、初步分析

HTTP 413 代表“请求体过大”,通常是服务端拥有上传大小限制。可能的源有两个:

  • Git 服务本身限制 (Gitblit/Gitea/GitLab)
  • Web 服务器如 Nginx 或 Apache 进行的前置限制

为了确认问题所在,我们进行下面的演示性测试。


三、演示测试: curl 模拟上传

步骤1: 创建大文件 (300MB)

在 PowerShell 中执行:

fsutil file createnew bigfile.test 314572800

步骤2: 使用 curl.exe 模拟 POST 上传

curl.exe -v -X POST http://域名/ -H "Expect:" --data-binary "@bigfile.test"

结果:

HTTP/1.1 413 Request Entity Too Large
Server: nginx

确认限制来自 Nginx,Git 本身无问题。

在这里插入图片描述

步骤3: 创建小文件 (1KB)

fsutil file createnew smallfile.test 1024

重复 curl POST 测试,结果成功,显示 Gitblit 网页内容,证明小文件能正常处理。

在这里插入图片描述


四、解决方案:修改 Nginx 配置 (宝塔面板)

操作步骤

  1. 打开宝塔面板后台 (http://你的IP:8888)

  2. 点击左侧「软件商店」,找到 Nginx

  3. 点击「配置修改」或「配置文件」

  4. 找到 http { 块,加入:

    client_max_body_size 512m;  # 允许最大上传体积为 512MB
    
  5. 保存配置

  6. 回到 Nginx 设置界面,重载配置或重启 Nginx

实际配置示意图

在这里插入图片描述

http {include       mime.types;default_type  application/octet-stream;client_max_body_size 512m;sendfile        on;keepalive_timeout  60;...
}

五、重试 Git 推送

配置重载后,再次执行 Git push,推送包大小达 274MB,已成功,问题解决。

在这里插入图片描述


六、总结与建议

操作步骤结果
curl 模拟上传 bigfile.test报 413,确认 Nginx 限制
curl 上传 smallfile.test成功返回 Gitblit 页面
修改 Nginx 配置重载后 push 成功

建议:

  • 尽量不要推送编译产物 (.dll/.lib/.pdb)
  • 使用 .gitignore或 Git LFS 管理大文件
  • 一旦推送无法成功,优先检查 Nginx/选项配置
http://www.lryc.cn/news/2386786.html

相关文章:

  • 第10章 网络与信息安全基础知识
  • GO语言学习(九)
  • go 访问 sftp 服务 github.com/pkg/sftp 的使用踩坑,连接未关闭(含 sftp 服务测试环境搭建)
  • Linux多线程(二)之进程vs线程
  • 【MogDB】测试 ubuntu server 22.04 LTS 安装mogdb 5.0.11
  • AI时代新词-数字孪生(Digital Twin)
  • 【HW系列】—web常规漏洞(文件上传漏洞)
  • 如何实现 C/C++ 与 Python 的通信
  • python炸鱼船
  • 使用AutoKeras2.0的AutoModel进行结构化数据回归预测
  • 好用但不常用的Git配置
  • ULVAC VWR-400M/ERH 真空蒸发器 Compact Vacuum Evaporator DEPOX (VWR-400M/ERH)
  • P1068 [NOIP 2009 普及组] 分数线划定
  • PPT连同备注页(演讲者模式)一块转为PDF
  • 第三十二天打卡
  • 项目三 - 任务8:实现词频统计功能
  • MongoDB 快速整合 SpringBoot 示例
  • 2025.05.22-得物春招机考真题解析-第二题
  • ollama list模型列表获取 接口代码
  • OPC Client第5讲(wxwidgets):初始界面的事件处理;按照配置文件初始化界面的内容
  • 什么是BFC,如何触发BFC,BFC有什么特性?
  • python做题日记(9)
  • Leetcode 3557. Find Maximum Number of Non Intersecting Substrings
  • 【C++进阶篇】初识哈希
  • Spring Boot——自动配置
  • 免费轻量便携截图 录屏 OCR 翻译四合一!提升办公效率
  • 使用 Vuex 实现用户注册与登录功能
  • 进程通信(管道,共享内存实现)
  • 电池预测 | 第28讲 基于CNN-GRU的锂电池剩余寿命预测
  • 快速上手SHELL脚本常用命令