2015-08-04 9 views
8

Lesen ich Fehler wie diese:Nginx Upstream gesendet zu groß Kopf während Antwort-Header von Upstream

[error] 27544#0: *47335682 upstream sent too big header while reading response 
header from upstream, client: 88.88.88.88, server: example..com, 
request: "POST /tool/ HTTP/1.1", upstream: "http://88.88.88.88:7080/tool/", 
host: "example.com" 

In Bezug auf diese Frage ist es möglich, Puffergröße von nginx conf-Datei wie folgt zu erhöhen: upstream sent too big header while reading response header from upstream

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

location 
     fastcgi_buffers 16 16k; 
     fastcgi_buffer_size 32k; 

(für zukünftige Referenz, Standardgröße für fastcgi_buffer_size und fastcgi_buffers ist 4k oder 8k, in Bezug auf Plattform)

Thi s Text erscheint in dem Browser des Benutzers: Nginx 502 Bad Gateway

Ich plane, um vorübergehend Puffergröße zu erhöhen. Dann kann ich loggen, wenn die Puffer zu groß sind. Ist es möglich Header zu finden, die zu groß für Upstream sind? apache_response_headers() und headers_list() haben mir nicht alle Antwort-Header gegeben. Es gab mir nur Verfalls-, Cache-Control- und Pragma-Header.

hat die Änderung proxy_buffer_size macht ein Performance-Problem?

(nginx Version: nginx/1.6.0, PHP 5.4.42, xcache 3.2)

+0

Check out http://stackoverflow.com/questions/ 13894386/upstream-too-big-nginx-codeigniter sollte sie ihre frage beantworten. –

+0

Was genau meinen Sie mit Ihrer Frage? Wie soll man die Header mit nginx überprüfen? Es ist ein Web-Server, kein Editor oder ein Traffic-Sniffing-Tool. Wenn Sie die Header überprüfen möchten, würde ich tcpdump empfehlen. – cnst

+0

Es ist auch möglich, die Puffergröße vorübergehend zu erhöhen und große Header zu protokollieren. Aber php headers_list gibt diese Daten nicht. – trante

Antwort

11

Sie einfach eine Antwort auf SO finden, aber was wirklich einen Unterschied macht ist die einzige Konfigurationsoption:

http { 
    fastcgi_buffer_size 32k; 
} 

Dennoch ist diese Empfehlung wahrscheinlich nicht das, was Sie wollen. Lassen Sie sich über Details sehen, warum das Problem zu lösen hilft:

fastcgi_buffer:

Syntax: fastcgi_buffers Anzahl Größe;

Standard: fastcgi_buffers 8 4k | 8k;

Kontext: http, server, location

Stellt die Anzahl und Größe der Puffer zum Lesen eine Antwort von dem FastCGI-Server verwendet wird, für eine einzelne Verbindung. Standardmäßig entspricht die Puffergröße einer Speicherseite. Dies ist entweder 4K oder 8K, abhängig von einer Plattform.

fastcgi_buffer_size:

Syntax: fastcgi_buffer_size Größe;

Standard: fastcgi_buffer_size 4k | 8k;

Kontext: http, server, location

Stellt die Größe des Puffers zum Auslesen des ersten Teils der vom Server empfangen FastCGI Antwort verwendet. Dieser Teil enthält normalerweise einen kleinen Antwortheader. Standardmäßig ist die Puffergröße gleich einer Speicherseite. Dies ist entweder 4K oder 8K, abhängig von einer Plattform. Es kann jedoch kleiner gemacht werden.

So gibt es nur fastcgi_buffer_size einen Unterschied macht, weil Antwort-Header nicht in den 4-KB-Puffer passen. Die meiste Zeit passiert es aufgrund der großen Cookie-Größe. Es wird daher dringend empfohlen, die Einstellungen unverändert zu belassen, aber die Cookie-Größe zu reduzieren und nur eine minimale Datenmenge wie user_id, session_id zu speichern. Der allgemeine Cookie-Speicher ist also für nicht-sensible IDs gedacht. Einige Browser behandeln große Cookies nicht gut.

So wäre die Lösung:

1. Reduce cookie size 

2. Get back to original settings 

http { 
    fastcgi_buffers 8 4k; 
    fastcgi_buffer_size 4k; 
} 

Bei Schwierigkeiten mit reduzieren Keksgröße deaktivieren Pufferung für diesen Ort:

location /request { 
    fastcgi_buffering off; 
} 
+0

Falls die Puffergröße vorübergehend erhöht wird und alle Anfragen protokolliert werden, die große Header-Größe haben, wie kann ich Header in PHP protokollieren? Ich habe versucht, apache_response_headers(), headers_list(), aber sie gaben nur diese Daten: Expires, Cache-Control, Pragma. Und diese Daten sind klein, um nicht zur alten Puffergröße zu passen. – trante

+0

Ich habe dieses Problem mit ownCloud. Wie reduziere ich die Cookie-Größe? – danger89

Verwandte Themen