299

次のようなエラーが発生します。

2014/05/24 11:49:06 [エラー] 8376#0: *54031 アップストリームは、アップストリームからの応答ヘッダーの読み取り中に大きすぎるヘッダーを送信しました, クライアント: 107.21.193.210, サーバー: aamjanata.com, リクエスト: "GET /the-洗脳-クロニクル-後援-グジャラート政府/,%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/the-brainwash-chronicles-グジャラート政府主催/,%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-グジャラート政府/、%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/、%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/ ,%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/the-洗脳-クロニクル-後援-グジャラート政府/,%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/the-brainwash-chronicles-グジャラート政府主催/,%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-グジャラート政府/、%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/、%20https://aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/the-洗脳-クロニクル-後援-グジャラート政府/,%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/the-brainwash-chronicles-グジャラート州政府主催/,%20ht

いつも同じです。カンマ区切りで何度も繰り返される URL。何が原因なのかわかりません。誰にもアイデアがありますか?

更新: 別のエラー:

http request count is zero while sending response to client

これが構成です。他にも関係ないところがありますが、この部分を加筆・修正しました

fastcgi_cache_path /var/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;
    # Upstream to abstract backend connection(s) for PHP.
    upstream php {
            #this should match value of "listen" directive in php-fpm pool
            server unix:/var/run/php5-fpm.sock;
    }

次にサーバーブロックで: set $skip_cache 0;

    # POST requests and urls with a query string should always go to PHP
    if ($request_method = POST) {
            set $skip_cache 1;
    }
    if ($query_string != "") {
            set $skip_cache 1;
    }

    # Don't cache uris containing the following segments
    if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
            set $skip_cache 1;
    }

    # Don't use the cache for logged in users or recent commenters
    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
            set $skip_cache 1;
    }

    location / {
            # This is cool because no php is touched for static content.
            # include the "?$args" part so non-default permalinks doesn't break when using query string
            try_files $uri $uri/ /index.php?$args;
    }


    location ~ \.php$ {
            try_files $uri /index.php;
            include fastcgi_params;
            fastcgi_pass php;
            fastcgi_read_timeout 3000;

            fastcgi_cache_bypass $skip_cache;
            fastcgi_no_cache $skip_cache;

            fastcgi_cache WORDPRESS;
            fastcgi_cache_valid  60m;
    }

    location ~ /purge(/.*) {
        fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
    }`
4

15 に答える 15

520

conf ファイルに以下を追加します。

fastcgi_buffers 16 16k; 
fastcgi_buffer_size 32k;
于 2014-05-24T13:46:16.257 に答える
184

nginxがプロキシ/リバースプロキシとして動作している場合

つまり、ngx_http_proxy_module

に加えてfastcgiproxyモジュールはリクエスト ヘッダーも一時バッファに保存します。

proxy_buffer_sizeそのため、とを増やすproxy_buffersか、完全に無効にする必要がある場合があります ( nginx のドキュメントをお読みください)。

プロキシ バッファリング構成の例

http {
  proxy_buffer_size   128k;
  proxy_buffers   4 256k;
  proxy_busy_buffers_size   256k;
}

プロキシ バッファを無効にする例 (長いポーリング サーバーに推奨)

http {
  proxy_buffering off;
}

詳細については、Nginx プロキシ モジュールのドキュメントを参照してください。

于 2014-12-18T16:26:25.960 に答える
31

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:  Undef
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 行目で、バッファ制限に達して壊れ、次のスレッドがそれを上書きしたことがわかります。その後、Nginx は接続を閉じ、クライアントに 502 を返しました。

2: リクエストごとに送信されたすべてのヘッダーをログに記録し、それらを確認して、それらが標準に準拠していることを確認します (nginx は、24 時間より古いものを Cookie の削除/期限切れにすることを許可しません。コンテンツがカウントされる前にエラー メッセージがバッファリングされたため、無効なコンテンツの長さを送信します。 ..)。getallheaders 関数呼び出しは通常、抽象化されたコードの状況で役立ちますphp すべてのヘッダーを取得する

例は次のとおりです。

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

于 2015-11-23T18:29:59.617 に答える
6

Symfony フレームワークを使用している場合: Nginx の設定をいじる前に、まず ChromePHP を無効にしてみてください。

1 - app/config/config_dev.yml を開く

2 - 次の行にコメントを付けます。

#chromephp:
    #type:   chromephp
    #level:  info

ChromePHP は、X-ChromePhp-Data ヘッダーに json エンコードされたデバッグ情報をパックします。これは、fastcgi を使用した nginx のデフォルト構成には大きすぎます。

ソース: https://github.com/symfony/symfony/issues/8413#issuecomment-20412848

于 2017-09-21T18:08:50.153 に答える
2

Symfonyプロジェクトの場合、次の行を .env ファイルに追加してみてください。

SHELL_VERBOSITY=0

https://symfony.com/doc/current/console/verbosity.html

私は自分のプロジェクトでこれをデバッグするのに非常に多くの時間を費やしましたが、この特定のソリューションだけが(正しい理由で)100%機能し、このトピックに関連するこの回答が見つからなかったので、ここに残します。多分誰かがそれが役立つと思うでしょう。

于 2021-09-24T21:28:50.630 に答える
0

このエラーが発生し、それを修正する 3 つの方法を見つけました。

  • SHELL_VERBOSITY=0.env で 3 未満の値を設定する: https://stackoverflow.com/a/69321273/13653732この場合、PHP ログを無効にしますが、開発やデバッグに役立つ場合があります。
  • で設定fastcgi.logging=0php.iniます。上記と同じ結果です。
  • Symfony を 5.2 から 5.3 に更新します。古いバージョンには問題があると思います。

すべての PHP Symfony ログは、Nginx のエラーのように認識されましたが、PHP は正しく機能しました。

Nginx 1.17、PHP 8.0.2、PHP-FPM、Symfony 5.2、Xdebug、Docker がありました。

新しいバージョンの Nginx 1.21、PHP 8.0.14 を試しましたが、結果はありませんでした。その問題はApacheにはありませんでした。

Nginx の構成を変更しましたが、結果もありませんでした。

于 2022-01-06T14:30:01.183 に答える