2011-01-26 8 views
24

ho errore di nginx error.log:cliente chiuso prematuramente la connessione durante l'invio al cliente, in nginx

2010/12/05 17:11:49 [info] 7736#0: *1108 client closed prematurely connection while sending to client, 
client: 188.72.80.201, server:***.biz, request: "GET /forum/ HTTP/1.1", 
upstream:"http://***:3000/forum/", host: "***.biz" 

devo 500 codice di risposta sul posto ogni volta. Come posso risolvere questo?

Grazie.

+0

Sei riuscito a trovare una soluzione a questo problema? – jithujose

+0

Forse questo aiuto: nessuna delle risposte ha funzionato per me. Sono passato a un altro computer e ho provato ad accedere all'indirizzo HTTPS e ha funzionato. Il problema è lato client o qualcosa memorizzato nella cache sul server. – arsenik

risposta

6

ho scoperto che se si spegne il buffer di delega aiuta

http { 
    proxy_buffering off; 
... 
} 

Probabilmente i buffer sono troppo piccoli o meno. Dopo aver modificato il buffer di dimensioni funziona bello

proxy_buffering on; 
proxy_buffer_size 8k; 
proxy_buffers 2048 8k; 
8

Impostazione proxy_ignore_client_abort on; potrebbe aiutarti.

+2

questo lo ha fatto per me – WuTheFWasThat

+0

questo funziona anche per me. Pollice su. Ricordati di impostarlo all'interno del blocco http in /etc/nginx/nginx.conf. Non riesco a farlo funzionare quando lo metto sotto il blocco del server –

+2

Qualcuno si preoccupa di spiegare perché questo lo risolverà? – cdmckay

2

Ho avuto lo stesso problema e ho studiato su di esso. Nel mio caso ciò accade solo con i browser Webkit (Chrome). Aprono connessioni ottimisticamente più connessioni di quelle che richiedono se si carica una sola risorsa. In tal caso, la connessione in eccesso viene chiusa in modo non corretto o almeno senza inviare alcun verbo HTTP su di esso. Questo porta all'errore menzionato in nginx.

Per quanto riguarda la risposta n. 1: Le soluzioni proposte non sono di aiuto, il che è logico in quanto non ha nulla a che fare con il proxy.

In merito alla risposta n. 2: proxy_ignore_client_abort on; non aiuto nel mio test.

Purtroppo, ho trovato altra soluzione che usare

error_log off;

-17

Ho iniziato a vedere questo messaggio quando modificato error_log da warn a debug. Reverting ha risolto il problema.

+21

Non nasconderebbe semplicemente il problema? – mr2ert

+31

risposta collettiva –

+6

rimuovere nginx sarebbe stata una soluzione, anche. – w00t

1

Ho avuto lo stesso problema, ho scoperto che nginx chiude la connessione a causa dell'impostazione send_timeout. Sono aumentato ed è stato risolto.

http 
{ 
send_timeout 20; 
... 
} 
+4

... ma il valore predefinito è in realtà 60 secondi: http://nginx.org/en/docs/http/ngx_http_core_module.html#send_timeout – Kzqai

-2

risolverà sicuramente il problema.

+1

spiega brevemente la tua risposta. dove OP ha bisogno di impostarlo ecc., in modo che sia utile anche per gli altri. – Ravimallya

+0

Sì, una spiegazione sarebbe utile. – fraxture

8

Ho affrontato questo problema me stesso per lunghe ore di oggi e trovato una soluzione:
Si prega di notare che questa correzione si ha effetto solo quando si utilizza bilanciamento del carico (s)

Controlla la tua bilanciamento del carico timeout di inattività. Ho avuto il timeout di inattività di ELB impostato su 60 secondi (impostazione predefinita) e mentre la richiesta era sospesa, ha chiuso la connessione dopo un determinato periodo di tempo. Ma poiché ELB è prima di nginx, nginx sta registrando che il "client" (in questo caso ELB) sta chiudendo la connessione.

Quindi, se si utilizza ELB, andare a:
EC2 -> bilanciamento del carico -> Selezionare quella corretta -> scorrere verso il basso nella descrizione e cambiare Timeout di inattività se si utilizza altri bilanciamento del carico, controllare la loro configurazione e timeout.

Anche tenere a mente che ancora potrebbe essere bisogno di cambiare i timeout del proxy, ecc

Problemi correlati