在使用 Git 推送包含较大编译产物的项目时,你是否遇到过 HTTP 413 Request Entity Too Large 错误?这通常并不是 Git 本身的问题,而是 Web 服务器(比如 Nginx)在门前拦了一道——拒绝接收大体积请求。下面通过一个完整案例,演示如何用 curl 工具验证服务器限制,再通过宝塔面板修改 Nginx 配置,最终让大文件 Git 推送顺利通过。这套方法适用于 Gitblit、Gitea 或任何基于 Nginx 部署的私有 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 配置(宝塔面板)
操作步骤
- 打开宝塔面板后台(http://你的IP:8888)
- 点击左侧「软件商店」,找到 Nginx
- 点击「配置修改」或「配置文件」
- 找到
http {块,加入一行:
client_max_body_size 512m; # 允许最大上传体积为 512MB
- 保存配置
- 回到 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)到 Git 仓库,这些文件体积大且频繁变更。
- 使用
.gitignore或 Git LFS 来管理大文件,才是长久之计。 - 一旦推送无法成功,优先检查 Nginx 的
client_max_body_size配置,这往往是第一道闸门。