美文网首页
nginx 控制台报net::ERR_CONTENT_LENGT

nginx 控制台报net::ERR_CONTENT_LENGT

作者: YiYaYiYaHei | 来源:发表于2022-02-24 17:56 被阅读0次

    今天在下载大文件(文件大小1.2GB)的时候,发现文件下载到99.98%的时候卡住了,控制台报了个net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK),因此做个记录。
    nginx配置文档

    1. 如何排查问题

    ① 先通过其他工具比如postman测试接口是否能完全下载成功,如果能下载成功,排除后端问题;
    ② 不经过nginx代理,看文件是否能下载成功,如果成功,排除代码问题;
    ③ 以上2步如果都没问题,大概率就是nginx的问题了。

    2. nginx解决
    2.1 查看nginx报错日志

    nginx.conf中查看nginx日志路径,一般是/var/log/nginx/error.log

    图2-1 nginx报错日志
    由图2-1可知,niginx报upstream prematurely colose connection while reading upstream
    百度说是后端传输的数据量太多了,超过了nginx设置的缓存区大小;
    2.2 解决办法

    ① 解决办法一:简单粗暴的关闭nginx缓冲
    nginx.confhttp模块内加入

    # 取消nginx缓冲
    proxy_request_buffering off;
    proxy_buffering off;
    

    ② 解决办法二:设置临时缓冲大小

    # 开启缓冲
    proxy_buffering on;
    # 从代理服务器接收到的响应的第一部分的缓冲区
    proxy_buffer_size 4k|8k;
    # 代理缓冲区 8 4k|8k;
    proxy_buffers   8 4k|8k;
    # 向客户端发送响应的缓冲区
    proxy_busy_buffers_size 8k|16k;
    

    由于以上四个参数是nginx的默认配置,因此解决办法二只需设置临时缓冲大小即可(也就是说proxy_max_temp_file_size和上面四个参数配套出现时才会生效)。

    nginx.confhttp模块内加入

    # 临时缓冲区不限制大小
    proxy_max_temp_file_size 0;
    
    2.3 原理

    Nginx 缓冲区设置 proxy_buffers相关配置

    proxy_buffer_size 64k;
    proxy_buffers   4 32k;
    proxy_busy_buffers_size 64k;
    

    proxy_buffering 开启的情况下,Nginx将会尽可能的读取所有的upstream端传输的数据到proxy_buffer_size中去(存储大小为64k),直到proxy_buffers设置的所有buffer们 被写满或者数据被读取完(存储大小为4*32k),这里可以理解为后端返回的数据最大64k+6*64k,此时就开始向客户端传输数据。

    如果后端返回的数据量真的很大的话,nginx接受设置临时缓冲区 proxy_max_temp_file_size 5000m;
    proxy_busy_buffers_size表示 64k传输完成后,会从temp_file里面接着读数据,直到传输完毕。

    推荐文章

    1、nginx配置文档
    2、Nginx 缓冲区设置 proxy_buffers相关配置

    相关文章

      网友评论

          本文标题:nginx 控制台报net::ERR_CONTENT_LENGT

          本文链接:https://www.haomeiwen.com/subject/ijazlrtx.html