美文网首页web前端
post请求体过大服务端报错,却没有日志输出?

post请求体过大服务端报错,却没有日志输出?

作者: 姜治宇 | 来源:发表于2022-05-19 14:18 被阅读0次

    服务器报错却没有日志输出

    最近发现这样一个问题:
    当执行一个保存的接口时,post的请求体过大会导致服务器报错。
    查了nginx的error.log和access.log,却没有任何输出,请求压根没传到服务器。
    这是怎么回事呢?

    问题排查

    一般来说,对post的请求体body并没有任何大小限制,但可以在nginx或node代码中做人为的限制。一旦触发了设置条件,请求会被直接打回,此行为并不会记录到日志中。
    我们可以把nginx的client_max_body_size设置的大一些;如果是直连node服务端,也可以通过代码进行限制,就不会出现上述问题了。

    var bodyParser = require('body-parser');
    var app = express();
    app.use(bodyParser.json({limit: '50mb'}));//使能 post 50mb以下的数据
    app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
    

    nginx请求体设置

    nginx限制请求体主要有以下几项:

    1、client_max_body_size

    限制请求体的大小。如果超过了所设定的大小,返回413错误。

    413 Request Entity Too Large
    
    2、client_body_timeout

    读取请求实体的超时时间。一旦超过了所设定的大小,返回413错误。

    3、client_header_timeout

    读取请求头的超时时间。一旦超过了所设定的大小,返回408错误。

    4、proxy_connect_timeout

    http请求无法立即被容器(tomcat等)处理,被放在nginx的待处理池中等待被处理。
    此参数为等待的最长时间默认为60秒,官方推荐最长不要超过75秒。

    5、proxy_read_timeout

    http请求被容器处理后,nginx会等待处理结果。也就是容器返回的response,此参数即为服务器响应时间,默认60秒。

    6、proxy_send_timeout

    http请求被服务器处理完后,把数据传返回给nginx的用时,默认60秒。

    相关文章

      网友评论

        本文标题:post请求体过大服务端报错,却没有日志输出?

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