it-swarm.com.de

Upstream hat einen zu großen Header gesendet, während der Antwortheader vom Upstream gelesen wurde

Ich erhalte diese Art von Fehlern:

2014/05/24 11:49:06 [Fehler] 8376 # 0: * 54031 Upstream gesendet zu großer Header beim Lesen des Antwortheaders vom Upstream, Client: 107.21.193.210, Server: aamjanata.com, Anforderung: "GET/the- Gehirnwäsche-Chroniken-gesponsert-von-Gujarat-Regierung /,% 20https: /aamjanata.com/the-brainwash-chronicles-gesponsert-von-gujarat-Regierung /,% 20https: /aamjanata.com/the-brainwash-chronicles- gesponsert von der Regierung von Gujarat /,% 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-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/t Die Gehirnwäsche-Chroniken-gesponsert-von-Gujarat-Regierung /,% 20https: /aamjanata.com/the-brainwash-chronicles-gesponsert-von-gujarat-Regierung /,% 20https: /aamjanata.com/the-brainwash- Chroniken-gesponsert-von-Gujarat-Regierung /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored- Von-Gujarat-Regierung /,% 20https: /aamjanata.com/die-Hirnwäschechroniken-gesponsert-von-Gujarat-Regierung/,% 20https: //aamjanata.com/die-Hirnwäschechroniken-gesponsert-von-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-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/the-brainwash-ch Ronicles-gesponsert-von-Gujarat-Regierung /,% 20ht

Immer ist es das selbe. Eine URL, die immer und immer wieder mit Komma getrennt wird. Kann nicht herausfinden, was dies verursacht. Hat jemand eine Idee?

Update: Ein weiterer Fehler:

http request count is zero while sending response to client

Hier ist die Konfig. Es gibt andere irrelevante Dinge, aber dieser Teil wurde hinzugefügt/bearbeitet

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

Und dann im Serverblock: setze $ 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";
    }`
201
Vidyut

Fügen Sie Ihrer conf-Datei Folgendes hinzu

fastcgi_buffers 16 16k; 
fastcgi_buffer_size 32k;
348
Neo

Wenn nginx als Proxy/Reverse-Proxy ausgeführt wird

das heißt, für Benutzer von ngx_http_proxy_module

Zusätzlich zu fastcgi speichert das Modul proxy auch den Anforderungsheader in einem temporären Puffer.

Daher müssen Sie möglicherweise auch den proxy_buffer_size und den proxy_buffers erhöhen oder ganz deaktivieren (Bitte lesen Sie die nginx-Dokumentation ).

Beispiel für die Konfiguration der Proxy-Pufferung

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

Beispiel für das Deaktivieren des Proxy-Puffers (empfohlen für lange Polling-Server)

http {
  proxy_buffering off;
}

Weitere Informationen: Dokumentation zum Nginx-Proxy-Modul

113
amd

upstream sent too big header while reading response header from upstream ist Nginx 'generische Art zu sagen: "Ich mag nicht, was ich sehe."

  1. Ihr Upstream-Server-Thread ist abgestürzt
  2. Der Upstream-Server hat einen ungültigen Header zurückgesendet
  3. Die von STDERR zurückgesendeten Hinweise/Warnungen liefen über, und sowohl es als auch STDOUT wurden geschlossen

3: Sehen Sie sich die Fehlerprotokolle über der Nachricht an. Streamen Sie mit protokollierten Zeilen vor der Nachricht? PHP message: PHP Notice: Undefined index: Beispielausschnitt aus einer Schleife meiner Protokolldatei:

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

sie können in der 3. Zeile von unten sehen, dass das Pufferlimit erreicht, gebrochen und der nächste Thread darüber geschrieben wurde. Nginx schloss dann die Verbindung und gab 502 an den Client zurück.

2: Protokollieren Sie alle pro Anfrage gesendeten Header, überprüfen Sie sie und stellen Sie sicher, dass sie den Standards entsprechen (nginx erlaubt es nicht, dass Cookies, die älter als 24 Stunden sind, gelöscht oder verfallen, und senden Sie ungültige Inhaltslängen, da Fehlermeldungen gepuffert wurden, bevor der Inhalt gezählt wurde. ..). Der Funktionsaufruf getallheaders kann normalerweise in Situationen mit abstrahiertem Code hilfreich sein php get all headers

beispiele beinhalten:

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

und das:

<?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: Überprüfen oder erstellen Sie ein Skriptprotokoll, um sicherzustellen, dass Ihr Thread den richtigen Endpunkt erreicht und nicht vor Abschluss beendet wird.

21
ppostma1

Plesk-Anweisungen

In Plesk 12 wurde Nginx als Reverse-Proxy ausgeführt (was meiner Meinung nach die Standardeinstellung ist). Die aktuelle Top-Antwort funktioniert also nicht, da nginx auch als Proxy ausgeführt wird.

Ich bin zu Subscriptions | [subscription domain] | Websites & Domains (tab) | [Virtual Host domain] | Web Server Settings gegangen.

Dann können Sie unten auf dieser Seite die Additional nginx directives einstellen, die ich hier als Kombination der beiden obersten Antworten festgelegt habe:

fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;
10
icc97

Wenn Sie das Symfony-Framework verwenden: Versuchen Sie zunächst, ChromePHP zu deaktivieren, bevor Sie mit der Nginx-Konfiguration anfangen.

1 - Öffnen Sie app/config/config_dev.yml

2 - Kommentiere diese Zeilen:

#chromephp:
    #type:   chromephp
    #level:  info

ChromePHP packt die Debug-Informationen json-encoded in den X-ChromePhp-Data-Header, der für die Standardkonfiguration von nginx mit fastcgi zu groß ist.

Quelle: https://github.com/symfony/symfony/issues/8413#issuecomment-20412848

5

Wir stellten fest, dass unser einziger Server, auf dem dies auftrat, die fpm-Konfiguration beschädigt hatte, was dazu führte, dass PHP-Fehler/Warnungen/Hinweise, die normalerweise auf der Festplatte protokolliert wurden, über den FCGI-Socket gesendet wurden. Es sieht so aus, als gäbe es einen Parsing-Fehler, wenn ein Teil des Headers auf die Puffer-Chunks aufgeteilt wird.

Daher genügte es, php_admin_value[error_log] auf etwas tatsächlich Beschreibbares zu setzen und php-fpm neu zu starten, um das Problem zu beheben.

Wir könnten das Problem mit einem kleineren Skript reproduzieren:

<?php
for ($i = 0; $i<$_GET['iterations']; $i++)
    error_log(str_pad("a", $_GET['size'], "a"));
echo "got here\n";

Das Erhöhen der Puffer machte es schwieriger, die 502 zu treffen, aber nicht unmöglich, z. B. native:

bash-4.1# for it in {30..200..3}; do for size in {100..250..3}; do echo "size=$size iterations=$it $(curl -sv "http://localhost/debug.php?size=$size&iterations=$it" 2>&1 | egrep '^< HTTP')"; done; done | grep 502 | head
size=121 iterations=30 < HTTP/1.1 502 Bad Gateway
size=109 iterations=33 < HTTP/1.1 502 Bad Gateway
size=232 iterations=33 < HTTP/1.1 502 Bad Gateway
size=241 iterations=48 < HTTP/1.1 502 Bad Gateway
size=145 iterations=51 < HTTP/1.1 502 Bad Gateway
size=226 iterations=51 < HTTP/1.1 502 Bad Gateway
size=190 iterations=60 < HTTP/1.1 502 Bad Gateway
size=115 iterations=63 < HTTP/1.1 502 Bad Gateway
size=109 iterations=66 < HTTP/1.1 502 Bad Gateway
size=163 iterations=69 < HTTP/1.1 502 Bad Gateway
[... there would be more here, but I piped through head ...]

fastcgi_buffers 16 16k; fastcgi_buffer_size 32k;:

bash-4.1# for it in {30..200..3}; do for size in {100..250..3}; do echo "size=$size iterations=$it $(curl -sv "http://localhost/debug.php?size=$size&iterations=$it" 2>&1 | egrep '^< HTTP')"; done; done | grep 502 | head
size=223 iterations=69 < HTTP/1.1 502 Bad Gateway
size=184 iterations=165 < HTTP/1.1 502 Bad Gateway
size=151 iterations=198 < HTTP/1.1 502 Bad Gateway

Daher glaube ich, dass die richtige Antwort lautet: Repariere deine fpm-Konfiguration, damit sie Fehler auf der Festplatte protokolliert.

2
lyte