线上问题Connection reset by peer排查处理

语言: CN / TW / HK

出现Connection reset by peer有很多原因造成,我针对我这次遇到的问题的排查过程做个介绍。

解决过程

首先看下错误,

image.png

错误的信息是Connection reset by peer,错误的类是catalina的ClientAbortException,google上搜到这篇文章,问题指引导到了nginx上来,我没有直接采取这篇文章的配置方式,先去看了nginx的日志文件

bash cd /varlog/nginx tail -f error.log 点击页面,日志滚动了

image.png

其中红框的部分,继续用google搜索

看到一篇文章

去到nginx的目录/urs/local/nginx

image.png

看这用户用户组不一样,还真是权限问题? 试试改成nginx bash chown -R nginx:nginx /usr/local/nginx/proxy-temp

改完后,立刻接口就能正常返回了。

小结

问题分析

请求的链路: 浏览器->nginx->server

响应的链路: 浏览器<-nginx<-server

其中server是部署在servlet容器里的,我们用的servlet容器是springboot自带的tomcat。

请求从tomcat发往nginx时,响应包的大小大于nginx的代理文件大小,于是nginx将文件写入临时目录,而这个临时目录访问权限不够,导致写不进去,于是nginx把连接重置了,业务服务器收到connection reset by peer的异常。

问题原因

当代理文件大小超过配置的proxy_temp_file_write_size值时,nginx会将文件写入到临时目录下(默认为/proxy_temp)。

如果nginx对/proxy_temp没有权限,就写不进去。

解决方式

调整/proxy_temp权限为配置nginx的那个用户。

bash chown -R nginx:nginx /usr/local/nginx/proxy-temp

扩展知识

关于nginx proxy_temp目录

存放临时响应缓冲的目录

关于proxy_temp_file_write_size配置

在开启缓冲后端服务器响应到临时文件的功能后,设置nginx每次写数据到临时文件的size(大小)限制。 size的默认值是proxy_buffer_size指令和proxy_buffers指令定义的每块缓冲区大小的两倍, 而临时文件最大容量由proxy_max_temp_file_size指令设置。