我得到这样的错误:
[error] 27544#0: *47335682 upstream sent too big header while reading response
header from upstream, client: 88.88.88.88, server: example..com,
request: "POST /tool/ HTTP/1.1", upstream: "http://88.88.88.88:7080/tool/",
host: "example.com"
关于这个问题,可以从nginx conf文件中增加缓冲区大小,如下所示:upstream sent too big header while reading response header from upstream
http {
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
location
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
(为了将来参考,fastcgi_buffer_size和fastcgi_buffers的默认大小是4k或8k,关于平台)
此文字显示在用户的浏览器中:Nginx 502 Bad Gateway
我打算暂时增加缓冲区大小。然后我可以在缓冲区太大时记录。是否有可能找到对上游来说太大的标题? apache_response_headers()和headers_list()没有给我所有响应头。它只给了我expires,cache-control和pragma header。
更改proxy_buffer_size会导致性能问题吗?
(nginx版本:nginx / 1.6.0,php 5.4.42,xcache 3.2)
答案 0 :(得分:15)
您可以在SO上轻松找到答案,但真正有所作为的是单一配置选项:
http {
fastcgi_buffer_size 32k;
}
然而,这个建议可能不是你想要的。让我们看看为什么这有助于解决问题:
语法:fastcgi_buffers数字大小;
默认值:fastcgi_buffers 8 4k | 8k;
上下文:http,服务器,位置
设置用于读取响应的缓冲区的数量和大小 来自FastCGI服务器,用于单个连接。默认情况下 缓冲区大小等于一个内存页面。这是4K或8K, 取决于平台。
语法:fastcgi_buffer_size size;
默认值:fastcgi_buffer_size 4k | 8k;
上下文:http,服务器,位置
设置用于读取第一部分的缓冲区的大小 从FastCGI服务器收到的响应。这部分通常包含 一个小的响应头。默认情况下,缓冲区大小等于1 记忆页面。这是4K或8K,具体取决于平台。它可以 然而,要做得更小。
因此只有 fastcgi_buffer_size 会产生影响,因为响应头不适合4KB缓冲区。大部分时间都是由于大的cookie大小而发生的。因此强烈建议保留设置,但减少cookie大小,并且只存储少量数据,如user_id,session_id,因此一般的想法cookie存储用于非敏感的ID集。有些浏览器不能很好地处理大型cookie。
所以解决方案是:
1. Reduce cookie size
2. Get back to original settings
http {
fastcgi_buffers 8 4k;
fastcgi_buffer_size 4k;
}
如果缩小cookie大小有困难,请关闭某个位置的缓冲:
location /request {
fastcgi_buffering off;
}