Gunicorn + nginx - 忽略 EPIPE

16

我在 Google Compute 上有一个 nginx-gunicorn-flask 的设置,但是我一直从 gunicorn 得到以下错误信息:

[2019-04-19 20:50:49 +0000] [3345] [DEBUG] POST /
[2019-04-19 20:50:49 +0000] [3345] [DEBUG] Ignoring EPIPE

在100个请求中,大约有23个类似于那样。在访问日志中只显示了23个请求,它们都是200。

从nginx访问日志中显示504错误,在错误日志中我看到了这个:

2019/04/19 20:50:49 [error] 3097#3097: *295 upstream timed out (110: Connection timed out) while sending request to upstream, client: ip, server: , request: "POST / HTTP/1.1", upstream: "http://unix:/home/user/Server/server.sock/", host: "ip"

我已经尝试设置
proxy_connect_timeout 75s;
proxy_read_timeout 300s;

根据其他问题的建议,我在nginx的位置和gunicorn中加入了--timeout 300,但没有起作用。

来自gunicorn的消息并没有帮助我确定原因,我也没有找到任何相关信息。

我一直在尝试解决这个问题,希望得到任何想法。此外,每个请求需要1-2秒的时间,而jmeter则显示出现结果之前有很长的延迟。

从gunicorn的代码来看,这是一个errno.EPIPE异常,与套接字有关...


我有同样的问题。我认为这是由于某些执行引起的。 - Devang Hingu
你是否在同一主机上托管Nginx和应用服务器?你能展示一下你的Nginx和Gunicorn配置吗? - HTF
有点相关(关于服务和sigpipe):[Hudson:“是的:标准输出:Broken pipe”](https://dev59.com/GWIj5IYBdhLWcg3wJCF-) - jfs
当工作进程重新启动并花费一些时间来恢复时,我会收到这些日志消息,同时健康检查正在对nginx进行运行。我只是猜测,可能是因为gunicorn的工作管理器在工作进程重新启动期间排队请求,然后工作进程处理这些请求,但当响应准备好时,客户端连接已经关闭了。就像我说的,这只是一个猜测。当工作进程处于启动状态并等待时,这些消息就会消失。 - leberknecht
3个回答

5

我遇到了类似的问题和超时错误,除了增加超时值之外,还需要添加Nginx配置 proxy_ignore_client_abort on;,请参考这个帖子Nginx文档

proxy_ignore_client_abort on;

0
如果在同一台服务器上运行GunicornNGINX,这可能是一个权限问题。
使用ps aux | grep gunicorn检查Gunicorn服务器正在以哪个用户身份运行您的应用程序,然后相应地更改权限。
停止NGINX,然后运行以下命令。
chown gunicorn_user_here.nginx /var/lib/nginx/tmp/proxy -v
rm /var/lib/nginx/tmp/proxy/* -R
chmod 777 /var/lib/nginx/tmp -v

启动NGINX并检查日志。


-2
在我的情况下,硬盘已满,这是导致问题的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接