上游过大 - 的nginx +笨(Upstream too big - nginx + codeig

2019-07-05 09:55发布

我从Nginx的得到这个错误,但似乎无法推测出来! 我使用笨和正在使用的会话数据库。 所以,我想知道如何头部都不能太大。 反正是有检查头是什么? 或潜在看看我能做些什么来解决这个问题?

让我知道如果你需要我忍受任何conf文件或什么,当你要求他们我会更新

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/"

UPDATE

我添加了以下内容的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/"

Answer 1:

添加到您的http {}通常位于/etc/nginx/nginx.confnginx.conf文件:

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

然后添加到您的PHP所在地块,这将是位于您的虚拟主机文件中查找以定位〜.PHP $ {开始块

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


Answer 2:

修改你的nginx的配置和变更/设置下列指令:

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


Answer 3:

我已经证明,当发送一个无效的头这也被发送。 无效字符或HTTP标头,Cookie有效期超过一个月设置回等的格式将所有原因的:上游发送过大报头而从上游读取响应头



Answer 4:

使用的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个字符(一个Bugzilla的请求)的URL的请求。

调试...

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网关错误”?

是的你可以! 我在读如何设置一个nginx的请求允许的URL长度(错误代码:414,URI太大)之前,因为我认为“嘿的网址太长”,但我得到的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的记录上游拆分标题行”

做了一些研究,并发现某处在互联网上:

  • http://forum.nginx.org/read.php?2,4704,4704
  • https://www.ruby-forum.com/topic/4422529
  • http://mailman.nginx.org/pipermail/nginx/2009-August/014709.html
  • http://mailman.nginx.org/pipermail/nginx/2009-August/014716.html

这是足以让我:

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


Answer 5:

我以前遇到过这个问题(不使用笨,但它发生时的响应中含有大量的报头数据)和习惯调整缓冲区的建议在这里,但最近我被这个问题再次咬伤和缓冲器显然好吗。

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

spdy_headers_comp 6;


文章来源: Upstream too big - nginx + codeigniter