老师,header请求体过大,nginx如何正确的去配置?

来源:1-1 课程介绍

ericdemon

2019-04-26

1、错误日志:
upstream sent too big header while reading response header from upstream,
2、网上的说法:
请求体携带的参数过大,因为默认是最大1K
3、网上的解决办法:
在location下面多增加
proxy_buffer_size 128k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 128k;

疑问:
老师,这三个参数分别是什么意思 , 因为这门课程之前买的时候比较早了,然后本身在后端开发的时候对nginx这块没有很深的去了解,直到今天碰到了这个情况才想起来的,所以希望老师能够稍微的讲解一下

谢谢老师

写回答

1回答

Jeson

2019-04-28

这个问题你要了解的有:

1、proxy_buffering这个参数用来控制是否打开后端响应内容的缓冲区,如果这个设置为off,那么proxy_buffers和proxy_busy_buffers_size这两个指令将会失效。所以需要开起。 

2、proxy_buffers的缓冲区大小一般会设置的比较大,以应付大网页。 proxy_buffers当中单个缓冲区的大小是由系统的内存页面大小决定的,Linux系统中一般为4k。 proxy_buffers由缓冲区数量和缓冲区大小组成的。总的大小为number*size。

3、后端服务器的相应头会放到proxy_buffer_size当中,这个大小默认等于proxy_buffers当中的设置单个缓冲区的大小。所以这个问题,这个数值需要调大很关键!

4、proxy_busy_buffers_size不是独立的空间,他是proxy_buffers和proxy_buffer_size的一部分。nginx会在没有完全读完后端响应的时候就开始向客户端传送数据,所以它会划出一部分缓冲区来专门向客户端传送数据(这部分的大小是由proxy_busy_buffers_size来控制的,建议为proxy_buffers中单个缓冲区大小的2倍)


0
1
ericdemon
老师, 那如果前端工程师通过ajax携带参数请求后端接口时,那么这个参数是存放在proxy_buffers的缓冲区里吗? 而后端响应了ajax的请求,返回的数据是存放在 proxy_buffer_size由缓冲区里吗?
2019-05-10
共1条回复

Nginx入门到实践-Nginx中间件应用+搭建Webserver架构

中间件、负载均衡、应用层安全防护、动静分离、Nginx+LUA开发等

4183 学习 · 908 问题

查看课程