线上问题Connection reset by peer排查处理
出现Connection reset by peer有很多原因造成,我针对我这次遇到的问题的排查过程做个介绍。
解决过程
首先看下错误,
错误的信息是Connection reset by peer,错误的类是catalina的ClientAbortException,google上搜到了这篇文章,问题指引导到了nginx上来,我没有直接采取这篇文章的配置方式,先去看了nginx的日志文件
bash
cd /varlog/nginx
tail -f error.log
点击页面,日志滚动了
其中红框的部分,继续用google搜索
看到一篇文章
去到nginx的目录/urs/local/nginx
看这用户用户组不一样,还真是权限问题?
试试改成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指令设置。