Nginx 请求体大小配置限制导致大文件上传失败

2020/3/14
解决方案
Nginx

在使用 Vue + Nginx + Tomcat + SpringBoot 开发一个文件上传的网站时,发现一上传大文件,总是上传到 50M 的时候就失败,并提示网络连接失败

如果是网络原因应该不会这么巧每次都在这个位置失败,所以把问题的关键点放在了上传限制上面,在这个数据的传输过程中,能够限制请求发送的数据大小的,有 Nginx,Tomcat,SpringBoot 这三个地方

从服务器 SpringBoot 的日志文件里看,没有找到什么错误信息,所以说这个请求还没有被 SpringBoot 处理到就被断开了

思考了一下,我是采用 Nginx 反向代理,根据 Nginx 的缓存机制,会先将请求完整接收完,再发送给 Tomcat 服务器,那么请求文件的大小是被 Nginx 限制的可能性就比较高了

于是看了一下 Nginx 的配置,发现了这个主配置文件里的这些配置信息

server_names_hash_bucket_size 512;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;

其中client_max_body_size就是请求体的最大值,只要把这个上限修改一下就可以解决问题了

当然更合理的方法是在对应 server 块里进行配置

server {
    listen 80;
    server_name 127.0.0.1;
    location / {
        client_max_body_size 4096m;
        proxy_pass http://localhost:8001;
    }
}

修改完重载一下 Nginx 的配置就可以上传大文件了

关于Nginx的其他网络请求配置可以参考: Nginx请求处理配置

Post Order
By Time : DESC
Article Statistics
Article: 35
Categories: 4
Tags: 18