Gunicorn + nginx - 忽略 EPIPE

K41*_*F4r 11 python nginx gunicorn server ubuntu-18.04

我在谷歌计算上运行了一个 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
Run Code Online (Sandbox Code Playgroud)

在 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"

Run Code Online (Sandbox Code Playgroud)

我试过设置

proxy_connect_timeout 75s;
proxy_read_timeout 300s;
Run Code Online (Sandbox Code Playgroud)

--timeout 300根据其他问题在 nginx 和gunicorn上的位置,但没有帮助。

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

一直试图解决这个问题,我很感激任何想法。此外,这些请求中的每一个都需要大约 1-2 秒,并且 jmeter 显示出巨大的延迟,直到结果出现。

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

rat*_*DBA 5

我遇到了类似的问题和超时错误,除了增加超时值之外,添加 Nginx 配置proxy_ignore_client_abort on;检查此线程Nginx 文档

proxy_ignore_client_abort on;
Run Code Online (Sandbox Code Playgroud)


Pau*_*ues 0

如果GunicornNGINX运行在同一台服务器上,这可能是权限问题。

检查 Gunicorn 服务器正在运行您的应用程序的用户ps aux | grep 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
Run Code Online (Sandbox Code Playgroud)

启动NGINX并检查日志。