如何解决“上游过早关闭连接”Nginx / Apache2错误

帕特里克·罗素
2021-12-28二二21

如何解决“上游过早关闭连接”Nginx / Apache2错误

主题

对于长时间运行的下载,特别是通过反向代理和使用像Docker这样的客户端,调整超时值可以解决围绕意外超时的错误。

影响版本

Artifactory 6。X和7。X

问题描述

这个问题通常发生在下载大文件时。这些下载通常需要花费1分钟以上的时间。这个问题的另一个组成部分是在Artifactory应用程序前面有一个反向代理或负载均衡器。在这个问题上遇到最多麻烦的客户端是那些以块形式下载文件的客户端,比如Docker。

如果你遇到了这个问题,Docker客户端会在拉大层时显示一个错误。你不会在Artifactory日志中发现任何错误,唯一的问题会被Nginx记录:

201/03/18 15:39:12[错误]11196#11196:*526上游过早关闭连接读取上游时,客户端:10。[…],服务器:~(?.+).artifactory.com,请求:“GET /v2/docker-local/blobs/sha256:d[…]e HTTP/1.1”,上游:“http://< artifactory - ip >:8081/artifactory/api/docker/docker-local/v2/sha256:d[…]e”,主机:“docker-local.artifactory.com”

此错误表示上游(在本例中为Artifactory)关闭了连接。

解决问题

Artifactory的Apache Tomcat有一个隐藏的超时设置。在某些情况下,例如长时间运行的Docker Pull,会达到此超时。发生这种情况时,Tomcat会过早地关闭连接。当这种情况发生时,不会打印人工端错误。

默认情况下Tomcat“connectionTimeout”参数设置为60秒。要解决大多数Docker Pull问题,将值增加到600秒,或10分钟:

(6。X– Directly update the tomcat server.xml]
connectionTimeout = " 600000 "/>

(7。X– Update the system.yaml]
artifactory:
tomcat:
连接器:
maxThreads: 200
extraConfig:“connectionTimeout = " 600000 " '