2015-08-04 14 views
8

ottengo l'errore come questo:Nginx monte inviato troppo grande colpo di testa durante la lettura intestazione di risposta da monte

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

Riguardo a questa domanda, è possibile aumentare le dimensioni del buffer da file di configurazione di nginx come questo: 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; 

(per riferimento futuro, dimensione predefinita per fastcgi_buffer_size e fastcgi_buffers è 4k o 8k, per quanto riguarda alla piattaforma)

Thi Il testo di s viene visualizzato nel browser dell'utente: Nginx 502 Bad Gateway

Ho intenzione di aumentare temporaneamente la dimensione del buffer. Quindi posso accedere quando i buffer sono troppo grandi. È possibile scoprire intestazioni troppo grandi per l'upstream? apache_response_headers() e headers_list() non mi hanno fornito tutte le intestazioni di risposta. Mi ha dato solo scadenze, controllo cache e intestazioni pragma.

La modifica di proxy_buffer_size causa problemi di prestazioni?

(versione nginx: nginx/1.6.0, php 5.4.42, XCache 3.2)

+0

Partenza http://stackoverflow.com/questions/ 13894386/upstream-too-big-nginx-codeigniter risponde alla tua domanda. –

+0

Cosa intendi esattamente per la tua domanda? Come dovresti controllare le intestazioni con nginx? È un server web, non un editor o uno strumento di sniffing del traffico. Se vuoi controllare le intestazioni, ti consiglio di usare tcpdump. – cnst

+0

L'aumento della dimensione del buffer temporaneamente e la registrazione di intestazioni grandi è anche un'opzione. Ma php headers_list non fornisce questi dati. – trante

risposta

11

si può facilmente trovare una risposta su SO, ma ciò che veramente fa la differenza è l'opzione di configurazione singola:

http { 
    fastcgi_buffer_size 32k; 
} 

Tuttavia questa raccomandazione probabilmente non è ciò che desideri. Vediamo attraverso i dettagli per questo che aiuta a risolvere il problema:

fastcgi_buffer:

Sintassi: fastcgi_buffers dimensioni numero;

Impostazione predefinita: fastcgi_buffers 8 4k | 8k;

Contesto: http server, posizione

Imposta il numero e le dimensioni dei buffer utilizzati per la lettura di una risposta dal server FastCGI, per una singola connessione. Per impostazione predefinita, la dimensione del buffer è uguale a una pagina di memoria. Questo è o 4K o 8K, a seconda di una piattaforma.

fastcgi_buffer_size:

Sintassi: dimensioni fastcgi_buffer_size;

Predefinito: fastcgi_buffer_size 4k | 8k;

Contesto: http server, posizione

Imposta la dimensione del buffer utilizzato per la lettura della prima parte del risposta ricevuta dal server FastCGI. Questa parte di solito contiene una piccola intestazione di risposta. Per impostazione predefinita, la dimensione del buffer è uguale a una pagina di memoria . Questo è o 4K o 8K, a seconda di una piattaforma. Tuttavia, è possibile rendere più piccolo.

Quindi c'è solo fastcgi_buffer_size fa la differenza perché intestazione di risposta non rientra nel buffer 4 KB. La maggior parte del tempo accade a causa della grande dimensione dei cookie. Pertanto è fortemente consigliato lasciare le impostazioni come sono ma ridurre la dimensione dei cookie e avere solo una quantità minima di dati memorizzati come user_id, session_id, quindi l'idea generale di memorizzazione dei cookie è per un set di ID non sensibile. Alcuni browser non trattano bene i cookie di grandi dimensioni.

Quindi la soluzione sarebbe:

1. Reduce cookie size 

2. Get back to original settings 

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

In caso di difficoltà con ridurre le dimensioni del biscotto di disattivare il buffering per certa posizione:

location /request { 
    fastcgi_buffering off; 
} 
+0

In caso di aumento temporaneo della dimensione del buffer e registrazione di tutte le richieste con grandi dimensioni dell'intestazione, come posso registrare le intestazioni in php? Ho provato apache_response_headers(), headers_list() ma hanno dato solo questi dati: Expires, Cache-Control, Pragma. E questi dati sono piccoli per non adattarsi alle vecchie dimensioni del buffer. – trante

+0

Ho riscontrato questo problema con ownCloud. Come ridurre la dimensione dei cookie? – danger89

Problemi correlati