解决nginx因body太大导致获取body内容失败
问题描述
当用户的body体过大时,ngx.req.get_body_data()
读请求体,会出现读取不到直接返回 nil
的情况
问题原因
究其原因,主要是 Nginx 诞生之初主要是为了解决负载均衡情况,而这种情况,是不需要读取 body 就可以决定负载策略的,所以这个点对于 API Server 和 Web Application 开发的同学有点怪。
解决办法
- 如果你只是某个接口需要读取 body(并非全局行为),那么这时候也可以显示调用
ngx.req.read_body()
接口 - 如果想全局生效的话需要使用命令
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