上游太大了 - nginx + codeigniter

时间:2012-12-15 17:17:01

标签: codeigniter session nginx header

我从Nginx收到此错误,但似乎无法弄明白!我正在使用codeigniter并使用数据库进行会话。所以我想知道标题是如何变得太大。反正有没有检查标题是什么?或者可能看到我能做些什么来修复这个错误?

如果您需要我提出任何配置文件或其他内容,请告诉我,我会根据您的要求进行更新

2012/12/15 11:51:39 [error] 2007#0: *5778 upstream sent too big header while reading response header from upstream, client: 24.63.77.149, server: jdobres.xxxx.com, request: "POST /main/login HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "jdobres.xxxxx.com", referrer: "http://jdobres.xxxx.com/"

更新

我在conf中添加了以下内容:

proxy_buffer_size   512k;
proxy_buffers   4 512k;
proxy_busy_buffers_size   512k;

现在我仍然得到以下内容:

2012/12/16 12:40:27 [error] 31235#0: *929 upstream sent too big header while reading response header from upstream, client: 24.63.77.149, server: jdobres.xxxx.com, request: "POST /main/login HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "jdobres.xxxx.com", referrer: "http://jdobres.xxxx.com/"

6 个答案:

答案 0 :(得分:125)

将此添加到 nginx.conf 文件的http {},该文件通常位于 /etc/nginx/nginx.conf

proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;

然后将此添加到您的php位置块,这将位于您的vhost文件中,查找以 location~.php $ {

开头的块
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;

答案 1 :(得分:8)

修改您的nginx配置并更改/设置以下指令:

    proxy_buffer_size   128k;
    proxy_buffers   4 256k;
    proxy_busy_buffers_size   256k;

答案 2 :(得分:5)

我已经证明,当传输无效标头时也会发送此消息。 HTTP标头的无效字符或格式,超过一个月的cookie过期等都将导致:上游从上游读取响应标头时发送过大的标头

答案 3 :(得分:5)

使用nginx + fcgiwrap +请求太长

我遇到了同样的问题,因为我使用的是nginx + fcgiwrap配置:

location ~ ^.*\.cgi$ {
    fastcgi_pass  unix:/var/run/fcgiwrap.sock;
    fastcgi_index index.cgi;
    fastcgi_param SCRIPT_FILENAME /opt/nginx/bugzilla/$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
    # attachments can be huge
    client_max_body_size 0;
    client_body_in_file_only clean;
    # this is where requests body are saved
    client_body_temp_path /opt/nginx/bugzilla/data/request_body 1 2;
}

并且客户端正在使用大约6000个字符的URL(bugzilla请求)执行请求。

调试...

location ~ ^.*\.cgi$ {
    error_log /var/log/nginx/bugzilla.log debug;
    # ...
}

这就是我在日志中得到的:

2015/03/18 10:24:40 [debug] 4625#0: *2 upstream split a header line in FastCGI records
2015/03/18 10:24:40 [error] 4625#0: *2 upstream sent too big header while reading response header from upstream, client: 10....

我可以" 414请求 - uri太大"而不是" 502坏网关"?

是的,你可以! 之前我正在阅读How to set the allowed url length for a nginx request (error code: 414, uri too large),因为我认为" he网址太长"但我得到的是502而不是414

large_client_header_buffers

尝试#1:

# this goes in http or server block... so outside the location block
large_client_header_buffers 4 8k;

这失败了,我的网址是6000个字符< 8K。试试#2:

large_client_header_buffers 4 4k;

现在我再也看不到502 Bad Gateway,而是看到414 Request-URI Too Large

"上游在FastCGI记录中分割标题行"

做了一些研究并在网上找到了某个地方:

这对我来说已经足够了:

location ~ ^.*\.cgi$ {
    # holds request bigger than 4k but < 8k
    fastcgi_buffer_size 8k;
    # getconf PAGESIZE is 4k for me...
    fastcgi_buffers 16 4k;
    # ...
}

答案 4 :(得分:4)

我在过去遇到过这个问题(不使用codeigniter,但只要响应包含大量的标题数据就会发生)并习惯于按照此处的建议调整缓冲区,但最近我再次被这个问题和缓冲区所困扰显然没事。

原来这是我在这个特定项目中使用的spdy的错,并通过启用这样的spdy头压缩来解决:

spdy_headers_comp 6;

答案 5 :(得分:-1)

Problem: upstream sent too big header while reading 
response header from upstream Nginx with Magento 2
Solution: Replace given below setting into /nginx.conf.sample File

  • fastcgi_buffer_size 4k;

使用

  • fastcgi_buffer_size 128k;
  • fastcgi_buffers 4 256k;
  • fastcgi_busy_buffers_size 256k;