2016-01-13 12 views
7

Ich habe ein Problem mit meinem nginx + uwsgi Konfiguration für meine django app, halte ich diese Fehler im Protokoll uwsgi Fehler bekommen:uwsgi IOError: Schreibfehler

Wed Jan 13 15:26:04 2016 - uwsgi_response_writev_headers_and_body_do(): Broken pipe [core/writer.c line 296] during POST /company/get_unpaid_invoices_chart/ (86.34.48.7) IOError: write error

Wed Jan 13 15:26:20 2016 - uwsgi_response_write_headers_do(): Broken pipe [core/writer.c line 238] during GET /gestiune/print_pdf/nir/136194/ (89.122.255.186) IOError: write error

ich sie nicht für alle Anfragen bekommen aber ich bekomme jede Minute ein paar davon. Ich suchte danach und ich verstehe, dass dies passiert, weil nginx die Verbindung zu uwsgi schließt, wenn uwsgi die Antwort schreiben will. Diese seltsam, weil in meiner nginx Konfiguration sieht Ich habe dies:

include uwsgi_params;

uwsgi_pass unix:/home/project/django/sbo_cloud/site.sock;

uwsgi_read_timeout 600;

uwsgi_send_timeout 600;

uwsgi_connect_timeout 60;

Ich bin sicher, dass keiner der Anträge, für die der Fehler überschreitet Timeout den 600 Sekunden erscheint hat. Irgendeine Idee, warum das passieren würde?

Dank

Antwort

6

Das Problem ist, dass die Kunden die Verbindung abbrechen und dann schließt Nginx die Verbindung ohne uwsgi zu sagen abzubrechen. Wenn uwsgi dann mit dem Ergebnis zurückkommt, ist der Socket bereits geschlossen. Nginx schreibt einen 499-Fehler in das Protokoll und uwsgi löst einen IOError aus.

Die nicht optimale Lösung besteht darin, Nginx zu sagen, den Socket nicht zu schließen und darauf zu warten, dass uwsgi mit einer Antwort zurückkommt.

Diese in nginx.config:

uwsgi_ignore_client_abort on; 

Es ist nicht klar, ob es möglich ist, Nginx zu sagen, die uwsgi Verbindung zu schließen. Es gibt ein anderes SO question über diese Ausgaben: (Propagate http abort/close from nginx to uwsgi/Django)