2016-01-13 151 views
7

我有我的nginx + uwsgi配置一個問題,我的Django應用程序,我不斷收到在uwsgi錯誤日誌中的錯誤:uwsgi IO錯誤:寫入錯誤

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

我沒有收到他們的所有要求但我每分鐘都會得到一些。 我搜索了它,我知道發生這種情況是因爲在uwsgi想寫響應的時候,nginx關閉了與uwsgi的連接。 這看起來很奇怪,因爲在我的nginx的配置我有這樣的:

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;

我肯定沒有請求對出現的錯誤有超過600秒計算的逾。 任何想法爲什麼會發生?

感謝

回答

6

的問題是,客戶中止連接,然後Nginx的關閉瞞着uwsgi中止連接。然後,當uwsgi返回時,套接字已經關閉。 Nginx在日誌中寫入499錯誤,並且uwsgi引發IOError。

非最佳解決方案是告訴Nginx不要關閉套接字並等待uwsgi返回響應。

把這個nginx.config:

uwsgi_ignore_client_abort on; 

目前尚不清楚是否有可能告訴Nginx的關閉uwsgi連接。還有另一個關於這個問題的研究:(Propagate http abort/close from nginx to uwsgi/Django