60

Nginxからこのエラーが発生していますが、理解できないようです! 私は codeigniter を使用しており、セッションにデータベースを使用しています。だから、ヘッダーが大きすぎることがあるのだろうかと思っています。とにかくヘッダーが何であるかを確認する方法はありますか? または、このエラーを修正するために何ができるかを確認できますか?

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

アップデート

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

6 に答える 6

137

これを、通常/etc/nginx/nginx.confhttp {}にある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;
于 2012-12-15T20:59:13.253 に答える
8

nginx 構成を変更し、次のディレクティブを変更/設定します。

    proxy_buffer_size   128k;
    proxy_buffers   4 256k;
    proxy_busy_buffers_size   256k;
于 2012-12-15T17:18:32.293 に答える
5

これは、無効なヘッダーが送信されたときにも送信されることが証明されています。無効な文字や HTTP ヘッダーのフォーマット、Cookie の有効期限が 1 か月以上前に設定されているなどのすべての原因が考えられます。

于 2013-09-18T14:31:38.737 に答える
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....

「502 bad gateway」の代わりに「414 request-uri too large」を使用できますか?

はい、できます!以前、「URL が長すぎる」と思ったので、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;

これは失敗します。私の URL は 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;
    # ...
}
于 2015-03-18T18:12:13.090 に答える
4

私は過去にこの問題に遭遇し(codeigniterを使用していませんが、応答に多くのヘッダーデータが含まれている場合に発生します)、ここで提案されているようにバッファーを微調整することに慣れましたが、最近この問題に再び噛まれ、バッファーは明らかに問題ありませんでした。

この特定のプロジェクトで使用していたのはspdyの障害であり、次のようにspdyヘッダーの圧縮を有効にすることで解決したことが判明しました。

spdy_headers_comp 6;
于 2013-03-21T11:31:21.067 に答える