5

「アップストリームからの応答ヘッダーの読み取り中に、アップストリームが送信したヘッダーが大きすぎます」

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/sites-enabled/default

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;
    }
}
4

5 に答える 5

12

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;
}
于 2012-09-16T11:50:32.883 に答える
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;

また、その仮想ホストのためだけにこれらの値を追加しました。私はそれが重要であるとは思わないが、試す価値があるかもしれない。

于 2012-07-19T22:54:48.683 に答える
1

Codeigniter は独自の最大サイズを設定します。それを制限する方法はわかりませんが、nginx を変更しても残念ながら何も変わりません。VBart と gsharma のすべてのヘルプに感謝します。

于 2012-07-27T01:50:49.327 に答える
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 をインストールした後、すべてが問題なく機能しました。

(私の英語でごめんなさい)

于 2013-09-19T09:50:49.983 に答える
0

長さが 800 バイト、ヘッダーが 4 つのページで、このエラーが発生します。Cookieを削除するためのサインアウトページでした。Cookie を期限切れにするために、私はそれらを自分の誕生日に戻していました。これは nginx では機能しませんでした。Cookie を削除するための検証に合格するには、有効期限が 1 か月未満である必要があります。

さらにいくつかの異なるが無効なヘッダーでチェックを実行したところ、同じ結果が得られました。nginx がスローするヘッダーを検証できない場合: アップストリームからの応答ヘッダーの読み取り中に、アップストリームが大きすぎるヘッダーを送信しました

2015: 経験からのより多くの情報: upstream sent too big header while reading response header from upstream「私が見ているものが好きではない」というnginxの一般的な方法です

  1. アップストリーム サーバー スレッドがクラッシュしました
  2. アップストリーム サーバーが無効なヘッダーを送り返しました
  3. STDERR から送り返された通知/警告がバッファを壊し、バッファと STDOUT の両方が閉じられました

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: 検証またはスクリプト ログを作成して、スレッドが正しい終点に到達し、完了前に終了していないことを確認します。

于 2013-09-18T14:33:22.370 に答える