web前端

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

2022-05-19  本文已影响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秒。

上一篇下一篇

猜你喜欢

热点阅读