自托管GitLab推送大量/大文件报remote end hung up unexpectedly解决方法
问题原因
Ubuntu自托管GitLab推送大文件触发fatal: the remote end hung up unexpectedly、减少推送文件量就恢复的故障,是多层大小/超时限制共同导致的。GitLab管理面板仅提供仓库单文件上传的基础限制,内置Web服务、Git底层传输、反向代理的相关限制默认不在面板暴露,很容易遗漏。
解决步骤(基于Ubuntu环境Omnibus方式安装的GitLab,90%以上自托管场景均为该安装方式)
- 修改GitLab主配置文件
编辑配置文件/etc/gitlab/gitlab.rb,调整以下配置项,不存在就直接新增:
保存退出后执行配置重载命令生效:# 配置Git单次推送的最大体积,单位为字节,示例为500MB,按需调整,设为0代表无限制 gitlab_rails['git_max_size'] = 524288000 # 配置Git操作超时时间,默认10秒过短,大文件传输容易超时断连,单位为秒,示例为10分钟 gitlab_rails['git_timeout'] = 600 # 配置GitLab内置Nginx允许的最大请求体体积,值需大于等于git_max_size对应大小 nginx['client_max_body_size'] = '500m'sudo gitlab-ctl reconfigure- 修改GitLab主配置文件
- 独立反向代理配置调整(仅当你没有用GitLab内置Nginx、自行部署Nginx/Caddy等反向代理时操作)
如果用Nginx做反向代理,在对应站点的server配置块中添加如下配置:
保存后执行配置校验与重载:client_max_body_size 500m;
如果用其他反向代理,找到对应「最大请求体大小」配置项,调整为和GitLab服务端一致的阈值即可。sudo nginx -t sudo systemctl reload nginx- 独立反向代理配置调整(仅当你没有用GitLab内置Nginx、自行部署Nginx/Caddy等反向代理时操作)
- 本地Git客户端配置调整
本地Git默认的HTTP传输缓存上限较低,也会触发大文件推送断连,在本地待推送的仓库目录下执行如下命令,调整缓存大小和服务端阈值匹配:
git config http.postBuffer 524288000- 本地Git客户端配置调整
注意事项
- 如果需要推送的单个文件大小超过100MB,不建议长期靠调大普通推送阈值解决,优先启用Git LFS追踪大文件,避免仓库体积过快膨胀,后续拉取、克隆操作卡顿。
- 如果调整配置后仍报错,直接查看GitLab内置Nginx错误日志定位拦截点,日志路径为
/var/log/gitlab/nginx/error.log,如果出现client intended to send too large body记录,说明Nginx层的大小限制没有正确重载生效。
内容的提问来源于stack exchange,提问作者CyberNoble
相关产品推荐
相关产品推荐

