解决nginx因body太大导致获取body内容失败

编程

问题描述

当用户的body体过大时,ngx.req.get_body_data() 读请求体,会出现读取不到直接返回 nil 的情况

问题原因

究其原因,主要是 Nginx 诞生之初主要是为了解决负载均衡情况,而这种情况,是不需要读取 body 就可以决定负载策略的,所以这个点对于 API Server 和 Web Application 开发的同学有点怪。

解决办法

  1. 如果你只是某个接口需要读取 body(并非全局行为),那么这时候也可以显示调用 ngx.req.read_body() 接口
  2. 如果想全局生效的话需要使用命令lua_need_request_body on;

当选择上述其中一种,甚至两种方案都使用了,依旧还解决不了问题,这时候,需要坚持body体是不是太大了。这是需要设置如下两个命令:

nginx">client_body_buffer_size 256k; #默认8k|16kclient_max_body_size 256k; #默认1m

上述两条命令将强制将body写入内存,这样就可以读取较大的body体的数据了。

如果请求体已经被存入临时文件,请使用ngx.req.get_body_file函数代替。

另外,如果nginx是在作为代理服务器proxy, 遇到body太大导致的问题,则需要修改如下参数

proxy_busy_buffers_size 2m;

proxy_buffers 16 2m;

proxy_buffer_size 2m;

参考

https://groups.google.com/forum/#!topic/openresty/bZsFvDdOyIQ

nginx后台转发时处理json数据过大问题

以上是 解决nginx因body太大导致获取body内容失败 的全部内容, 来源链接: utcz.com/z/512297.html

回到顶部