Gunicorn Nginx超时问题

时间:2011-07-25 12:36:33

标签: django nginx gunicorn

我在gunicorn + nginx上运行django。我正面临文件上传的问题。实际上上传工作正常,但枪炮超时因此导致nginx:

2011/07/25 12:13:47 [error] 15169#0: *2317 upstream timed out (110: Connection timed out) while reading response header from upstream, client: IP-ADDRESS, server: SERVER, request: "GET /photos/events/event/25 HTTP/1.1", upstream: "http://127.0.0.1:29000/photos/events/event/25", host: "HOST", referrer: "REFERER_ADDRESS"

如果我刷新页面,我可以看到所有照片都上传得很好。问题是它会导致超时,从而给人的印象是上传不起作用。

这是我的枪声:

bind = "127.0.0.1:29000"
logfile = "/path/to/logs/gunicorn.log"
workers = 3

我尝试更改超时但它没有用。

5 个答案:

答案 0 :(得分:83)

您可以尝试通过添加:

来升级Nginx中代理传递的超时
proxy_connect_timeout 75s;
proxy_read_timeout 300s;

on / var / nginx / sites-available / [site-config]或/var/nginx/nginx.conf如果你想增加nginx服务的所有网站的超时限制。

您必须将--timeout 300添加到gunicorn进程/配置中。

这解决了过去更大的上传问题。

答案 1 :(得分:31)

这不是nginx超时,但可能是Gunicorn超时。 Gunicorn默认为30秒超时。

通常,您应该通过不使用超过30秒的端点返回来解决此问题,但如果它是一个很少使用的端点,您也可以只增加gunicorn超时。

如果你这样做,你也应该增加gunicorn工作进程的数量。

要增加gunicorn的超时和工作人员,可以在开始时添加以下命令行选项:

gunicorn --timeout 120 --workers <NUMBER OF WORKER YOU WANT>

答案 2 :(得分:15)

使用Django + nginx + gunicorn我们遇到了同样的问题。 从Gunicorn文档中我们已经配置了优雅超时,这几乎没有任何区别。

经过一些测试,我们找到了解决方案,配置的参数是:timeout (而不是优雅的超时)。它就像一个时钟......

所以,做:

1)打开gunicorn配置文件

2)将TIMEOUT设置为您需要的值 - 以秒为单位

NUM_WORKERS=3
TIMEOUT=120

exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--timeout $TIMEOUT \
--log-level=debug \
--bind=127.0.0.1:9000 \
--pid=$PIDFILE

答案 3 :(得分:0)

如果您将反向代理与Nginx一起使用,并使用Gunicorn运行Django应用,请尝试将Gunicorn超时参数和proxy_read_timeout参数调整为默认值。

答案 4 :(得分:-1)

这可能有助于有类似问题的人。

我的Django应用程序中的nginx和gunicorn出现超时错误。由于我从nginx获得了超时错误,我无法从Django中看到真正的错误。添加像fijter建议的新超时之后。我可以看到错误发生在settings.py文件中。

如果您将DEBUG设置为False,并且未在ALLOWED_HOSTS中添加域名,则可能会收到此错误。

我刚刚在settings.py的ALLOWED_HOSTS中添加了域名,错误消失了。

非常简单的解决方案!