web-dev-qa-db-ja.com

アップストリームが大きすぎる-nginx + codeigniter

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

[〜#〜] 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/"
56
Aram Papazian

これを通常、/ etc/nginx/nginx.confにあるnginx.confファイルのhttp {}に追加します:

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;
126
PhearOfRayne

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

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

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でリクエストを行っていました(バグジラリクエスト)。

デバッグ中...

_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」を使用できますか?

はい、できます!私は読んでいた nginxリクエストに許可されたURLの長さを設定する方法(エラーコード:414、uriが大きすぎます) 前に「URLが長すぎる」と思っていたが、_502414_ではなく__です。

_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;
    # ...
}
_
5
dnozay

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

5
ppostma1

私は過去にこの問題に遭遇しました(codeigniterを使用していませんが、応答に大量のヘッダーデータが含まれている場合は常に発生します)。 。

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

spdy_headers_comp 6;