nginx大头响应

时间:2012-07-17 16:17:33

标签: facebook nginx header

“上游从上游读取响应头时发送了太大的标题”

当我尝试从Facebook进行身份验证时,我会继续这样做。我增加了缓冲区:

proxy_buffer_size   256k;
proxy_buffers   8 256k;
proxy_busy_buffers_size   512k;
fastcgi_buffers 8 256k;
fastcgi_buffer_size 128k;

但它似乎没有帮助。有关为何会出现这种情况的任何想法吗?

nginx.conf文件:

user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    # multi_accept on;
}


http {
    include       /etc/nginx/mime.types;

proxy_buffer_size   256k;
proxy_buffers   8 256k;
proxy_busy_buffers_size   512k;
fastcgi_buffers 8 256k;
fastcgi_buffer_size 128k;

    access_log  /var/log/nginx/access.log;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

的/ etc / nginx的/ /默认启用位点-

server {
    listen   80 default;
    server_name  localhost;

    access_log  /var/log/nginx/localhost.access.log;

    location / {
        root   /var/www/nginx-default;
        index  index.html index.htm;
    }

    location /doc {
        root   /usr/share;
        autoindex on;
        allow 127.0.0.1;
        deny all;
            }

    location /images {
        root   /usr/share;
        autoindex on;
    }
}

5 个答案:

答案 0 :(得分:11)

在codeigniter中我遇到了同样的错误。这对我有用:

http://forum.nginx.org/read.php?2,192785,196003#msg-196003

在.conf

location ~* \.php$ {
    fastcgi_pass 127.0.0.1:9001;
    fastcgi_index index.php;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    # 16-sept-2012 parametros para evitar el 502
    fastcgi_temp_file_write_size 10m;
    fastcgi_busy_buffers_size 512k;
    fastcgi_buffer_size 512k;
    fastcgi_buffers 16 512k;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_intercept_errors on;
    fastcgi_next_upstream error invalid_header timeout http_500;
}

答案 1 :(得分:2)

今天早上我有同样的问题。但是,增加缓冲区大小对我有用。这是我使用的设置:

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

我在配置中看不到的唯一设置是

   proxy_temp_file_write_size 256k;

另外,我为这个vhost添加了这些值。我认为这不重要,但可能值得尝试。

答案 2 :(得分:1)

结果Codeigniter设置自己的最大尺寸。我还没弄明白如何限制它,但不幸的是,更改nginx不会改变任何东西。感谢VBart和gsharma的所有帮助。

答案 3 :(得分:0)

我收到此错误,在800字节长的页面上,4个标头。这是一个删除cookie的注销页面。为了使饼干过期,我将它们重新设置为我的生日。这在nginx中不起作用,它们必须在不到一个月的时间内过期才能通过验证来删除cookie。

我对一些不同的但是无效的标题进行了检查并获得了相同的结果。如果nginx无法验证它会抛出的头:上游在从上游读取响应头时发送了太大的头

2015:来自经验的更多信息: upstream sent too big header while reading response header from upstream是nginx的通用方式,说“我不喜欢我所看到的”

  1. 您的上游服务器线程崩溃
  2. 上游服务器发回无效标头
  3. 从STDERR发回的通知/警告打破了他们的缓冲区,并且它和STDOUT都已关闭
  4. 3:查看消息上方的错误日志,是否在消息前面记录了行? PHP message: PHP Notice: Undefined index: 我的日志文件循环中的示例代码段:

    2015/11/23 10:30:02 [error] 32451#0: *580927 FastCGI sent in stderr: "PHP message: PHP Notice:  Undefined index: Firstname in /srv/www/classes/data_convert.php on line 1090
    PHP message: PHP Notice:  Undefined index: Lastname in /srv/www/classes/data_convert.php on line 1090
    ... // 20 lines of same
    PHP message: PHP Notice:  Undefined index: Firstname in /srv/www/classes/data_convert.php on line 1090
    PHP message: PHP Notice:  Undefined index: Lastname in /srv/www/classes/data_convert.php on line 1090
    PHP message: PHP Notice:
    2015/11/23 10:30:02 [error] 32451#0: *580927 FastCGI sent in stderr: "ta_convert.php on line 1090
    PHP message: PHP Notice:  Undefined index: Firstname
    

    你可以在第3行(从之前的20个错误中)看到缓冲区限制被击中,破坏,并且下一个线程在其中写入。 Nginx然后关闭连接并将502返回给客户端。

    2:记录每个请求发送的所有标头,检查它们并确保它们符合标准(nginx不允许任何超过24小时的内容删除/过期cookie,发送无效内容长度,因为错误消息在内容计算...)

    示例包括:

    <?php
    //expire cookie
    setcookie ( 'bookmark', '', strtotime('2012-01-01 00:00:00') );
    // nginx will refuse this header response, too far past to accept
    ....
    ?>
    

    和此:

    <?php
    header('Content-type: image/jpg');
    ?>
    
    <?php   //a space was injected into the output above this line
    header('Content-length: ' . filesize('image.jpg') );
    echo file_get_contents('image.jpg');
    // error! the response is now 1-byte longer than header!!
    ?>
    

    1:验证或制作脚本日志,以确保您的线程到达正确的终点并且在完成之前不退出。

答案 4 :(得分:0)

我们正在移动我们的生产环境,旧的工作环境没有问题,并且在从上游读取响应头时问题上“上游发送过大的标题”。这是Codeigniter 2.x应用程序。

就像@gsharma所说,用这个更改了服务器配置后,错误日志就消失了。

    fastcgi_buffers 256 4k;
    fastcgi_buffer_size 8k;

然而,仍然有一些问题:登录已经不再工作了。 问题出在$ config ['sess_encrypt_cookie'] = TRUE;

使用sess_encrypt_cookie时,Codeigniter会尝试使用mcrypt库,但如果它不存在则使用名为“_xor_encode”的方法。好吧,我认为这种方法很麻烦。

安装php-mcrypt后,一切正常,没有问题。

(对不起我的英文)