因业务需求,需要把内网gitlab仓库的地址对外网访问,在gitlab前端配置了一个nginx代理服务器,来实现需求,可以在git clone的时候报error: RPC failed错误

[root@Server_yd]# git clone  http://username:password@gitlab.linzhongfengniao.com/ElectronicAPI.git
Initialized empty Git repository in /tmp/ElectronicVisaAPI/.git/
remote: Counting objects: 9332, done.
remote: Compressing objects: 100% (4898/4898), done.
error: RPC failed; result=18, HTTP code = 200
Receiving objects:   1% (94/9332), 12.00 KiB | 10 KiB/s
^C

经查询大致的意思就是内容过大,需要配置http.postBuffer,在服务器端配置后,依然无效,使用没有经过nginx代理端的地址测试正常。

git config --global http.postBuffer 524288000

由此判断问题出现在了nginx代理服务器,下载大文件超时。

nginx代理前端用户请求下载文件, nginx代理会先从后端nginx拿到文件并缓存到本地,然后响应给客户端,其中与proxy buffer相关的配置项如下:

proxy_buffer_size 512k;
proxy_buffers 4 512k;
proxy_busy_buffers_size 512k;
proxy_temp_file_write_size 512k;

由此可知, buffer缓冲区最大可以缓冲2.5M的数据,然后就开始刷写磁盘,如果磁盘无法写入,数据丢失。这也是为什么前端下载部分数据,即下载不动的原因。

原因分析:
1、代理服务器报告:上游过早的关闭连接,好像问题出在被代理服务器;而被代理服务器则抱怨:上游服务器超时。那么一个很合理的推论是:代理服务器很长时间没向被代理服务器请求数据,被代理服务器认为代理服务器已经掉线或完成任务,于是主动断开连接,代理服务器发现需要数据,再连接时,已经连接不上了。
2、正常的流程应该是:只要客户端一直下载,“客户机->代理服务器->被代理服务器”,这一连串的数据流不会中断,也就不会出现超时。
3、出现超时只能有一种情况:代理服务器缓存了大文件。
4、代理服务器接到下载请求,向被代理服务器请求数据,由于两个服务器之间网速快,所以代理服务器请求速度要远大于向客户端发送的速度,这就导致一下正常的代理方式:代理服务器要缓存数据。
5、但是两个服务器之间的速度实在是太快了,缓存1G数据也就是分分钟的事情,而客户端需要慢慢下载,可能需要十几、甚至几十分钟。代理服务器和被代理服务器这段时间内没有什么事可干,与是两端静默的时间一长,超过了timeout的时间(一般是60s),被代理服务器就认为代理服务器掉线。
解决方案:
1)将代理服务器缓存设置更大,可以直接缓存整个文件,跟上面的解决一样
2)禁用代理服务器缓存:

 proxy_redirect default;proxy_buffering off;

3)设置更长的超时时间

proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)

代理配置如下:

server {listen       80;server_name  gitlab.linzhongfengniao.com;access_log  /var/log/nginx/gitlab.linzhongfengniao.log main;set $web_url $host;if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot"){return 404;}location / {proxy_pass         http://192.168.3.100;include /etc/nginx/conf.d/deny.conf;proxy_redirect default;proxy_buffering off;proxy_set_header   Host             $host;proxy_set_header   X-Real-IP        $remote_addr;proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;set $domain default;}
}

转载于:https://www.cnblogs.com/cyleon/p/9982394.html

git clone的时候报error: RPC failed; result=18错误相关推荐

  1. 对于在git上面拉代码报“error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054“解决方法

    对于在git上面拉代码报"error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054"解 ...

  2. gitlab报错 fatal: index-pack failed error: RPC failed; result=18, HTTP code = 200解决方案

    gitlab报错 "fatal: index-pack failed error: RPC failed; result=18, HTTP code = 200",如下图 这个问题 ...

  3. gitlab报错 fatal index-pack failed error RPC failed result

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! gitl ...

  4. git clone 报错:error: RPC failed; curl 18 transfer closed with outstanding read

    欢迎移步我的个人博客 git clone 时候报错如下 error: RPC failed; curl 18 transfer closed with outstanding read data re ...

  5. git pull 报错:git - error: RPC failed; curl 18 transfer closed with outstanding read data remaining 解决

    在git pull公司项目的时候,发现报错了.报错信息如下所示: 报错信息: fatal: The remote end hung up unexpectedly error: RPC failed; ...

  6. git pull 报错:git - error: RPC failed curl 18 transfer closed with outstanding read data remaining 解决

    文章目录 1.美图 2.背景 4.配置缓冲区大小 5.查看配置 1.美图 2.背景 在git pull公司项目的时候,发现报错了.报错信息如下所示: 报错信息: fatal: The remote e ...

  7. github clone报错error: RPC failed; result=56, HTTP code = 200

    报错信息为: error: RPC failed; result=56, HTTP code = 200 fatal: The remote end hung up unexpectedly fata ...

  8. git clone 出错 RPC failed;result = 18,http code = 200

    在使用git时 命令 git clone报错: rpc failed;result = 18,http code = 200 复制代码 是缓存区内存不足 造成的 于是 修改 缓存配置 git conf ...

  9. git push throws error: RPC failed; result=22, HTTP

    为什么80%的码农都做不了架构师?>>>    原因:默认 Git 设置 http post 的缓存为 1MB,将其设置为 500MB 解决办法如下: git config http ...

最新文章

  1. 开机f8修复电脑步骤_电脑无法启动,屏幕显示白色小横条,怎么办?可收藏以备不时之需...
  2. 关于多边形内点数问题的一些变形
  3. C#学习基本概念之匿名方法及Lambda表达式
  4. JQuery ajax()实例
  5. 网络工程师需要哪些知识_成长工程师可以教给我们哪些工程知识
  6. can't request region for resource [mem 0xfed40080-0xfed40fff]问题的解决办法
  7. java定时器异常,定时任务异常 高手进
  8. mysql将职称列改为工种_MySQL-其他
  9. 如何优化及安全设置Linux系统
  10. java微信支付,企业微信号转账给个人
  11. Uphone开发心得
  12. 回声消除(AEC)初体验之matlab仿真
  13. Jmeter与搜狗输入法、百度输入法不兼容问题解决方法
  14. C++二分查找相关函数用法总结
  15. atcod D - Staircase Sequences
  16. easypoi 语法_请问英语如何学习语法?
  17. 主板aspm关闭_bios关闭acpi的方法步骤图文详解
  18. SWUST OJ 67: 学生成绩管理
  19. Android实现画板功能(一)
  20. 什么是checkpoint (转)

热门文章

  1. redis配置文件redis.conf参数说明
  2. MySQL · 捉虫动态 · 并行复制外键约束问题二
  3. HDOJ 1914 The Stable Marriage Problem
  4. atmega8 例程:T1定时器 快速PWM
  5. 思科——单臂路由与DHCP的结合
  6. 容器架构向无服务架构的演进—深圳站
  7. python--windows下安装BeautifulSoup
  8. Oracle ADG vs DG
  9. 浏览器允许的并发请求资源数是有限制的-分析
  10. SQL备份与恢复之备份类型和选项