错误描述:
今天遇到一个Excel导出报 java.io.IOException: Connection reset by peer 这个问题。
首先是因为把代码部署到了测试服务器,然后测试导出Excel就出现了异常。
但是之前本地测试都没毛病,为何一到线上就出问题了呢?
其实是因为测试服务器上有做Nginx转发,但是有个Nginx属性我没配置,所以出现了问题。
解决如下:
了解到 nginx.conf 配置中有一个文件缓冲区大小的配置 proxy_buffer_size 默认大小是512KB,我的Excel文件大小是300KB,然后Tomcat的http请求超出了Nginx的缓冲区大小,所以被强制reset了就导致了这个错误。
当然导致这个错误的原因还有许多,我所描述的只是我所遇到的。
接下来就是配置nginx.conf 解决问题。
我找到原因后立马测试因为是测试服务器所以直接给 proxy_buffering 这个配置给设置成 off 一测试,果然可以了。
server
{
listen 80;
server_name www.xxx.com;
proxy_buffering on; // 开启文件缓冲(默认)
proxy_buffer_size 2048k; // Nginx使用该大小申请read_buf
proxy_buffers 2 2048k; // buffer个数 和 每个buffer大小。
proxy_busy_buffers_size 4k;
proxy_temp_path /tmp/nginx_proxy_tmp 1 2;
proxy_max_temp_file_size 20M;
proxy_temp_file_write_size 8k;
location /
{
proxy_pass http://192.168.10.110:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
关于此配置详解请参考:https://www.cnblogs.com/wshenjin/p/11608744.html
当然在百度寻找问题时,也发现了其他可能导致的原因,这里列出来,但是没有测试,各位做个参考吧。
1.Tomcat的原因报出此错误:https://blog.csdn.net/lafengwnagzi/article/details/72846195
2.SpringMvc原因报出此错误 - - (这个链接找不到了,记得是因为 DispatchServlet 会拦截需要配置sping的文件上传大小)。
参考链接:https://www.cnblogs.com/FlyAway2013/p/10580594.html