HTTPS请求gitlab 6.5超时

3
我这里有一个非常酷的GitLab设置:
  • Apache 2.2.22-1ubuntu1.4
  • GitLab 6.5(使用mod_proxy集成到Apache中)
  • Unicorn v4.3.1(Rails Web服务器)
  • 2MBit上下行网络连接
然而,当尝试“git clone”或“git pull”大于10 Mib的仓库时,会失败。
ubuntu~/Projects/git/myRepo(master|✔) % git pull 
Username for 'https://example.org': my.username@mydomain.de 
Password for 'https://my.username@mydomain.de@example.org': 
remote: Counting objects: 7798, done. 
remote: Compressing objects: 100% (4132/4132), done. 
fatal: The remote end hung up unexpectedlyiB | 222 KiB/s     
fatal: early EOF
fatal: index-pack failed 

似乎最多可以复制约8Mib的数据并运行大约30秒。问题每次都能够重复,并且一遍又一遍地显示相同的故障迹象。
我已经阅读过:http://jinsucraft.wordpress.com/2013/01/08/when-github-git-clone-fails-with-early-eof-and-index-pack-failed/并尝试过:
git config --global http.postBuffer 524288000

在客户端尝试了一切无果。

有人知道这是什么原因吗?


你是如何通过Skyr的回答解决问题的?我也遇到了这个问题。我使用的是Nginx而不是Apache。我增加了所有超时设置,但问题仍然存在。我也在这里提问过(https://dev59.com/uH7aa4cB1Zd3GeqPwuwp)。 - Li Dong
1个回答

7
这个问题的原因可能是超时问题(或类似的限制,例如数据量):服务器端超时导致http连接关闭,从而导致客户端出现“早期EOF”错误消息。这样的超时可以在几个地方进行配置(我在此列出它们,因为其他Web服务器可能具有类似的设置,所以它们可能会给您提示要查找的位置):
  • Apache的Timeout确定绝对静默时间(即没有数据传输)之前连接断开的时间。由于数据持续接收,这不是问题所在。
  • Apache mod_proxy的ProxyTimeout是上述Timeout的专业设置。同样,它不是总请求时间的限制,所以这不是问题所在。
  • Apache可以使用LimitRequestBody限制POST请求的大小;默认情况下没有限制,但在您的发行版配置中可能会有所不同。
  • gitlab的Unicorn configuration example建议设置30秒的超时时间。这是一个绝对的超时时间,例如,每个请求超过30秒将被终止。
增加独角兽配置中的超时时间应该可以解决您的问题。请注意,独角兽还限制了并行请求的数量。克隆大型仓库会阻塞一个请求,但几乎不会造成CPU负载。如果您的GitLab服务器没有高流量,请考虑增加worker_process数。
另外需要注意的是:gitlab.yml配置也提供了 git timeout;此超时限制计算多个提交的差异等git操作。这对于克隆/拉取时的超时没有影响。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接