2016-01-13 150 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