Gunicorn Nginx超时问题

58 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"
Run Code Online (Sandbox Code Playgroud)

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

这是我的枪炮:

bind = "127.0.0.1:29000"
logfile = "/path/to/logs/gunicorn.log"
workers = 3
Run Code Online (Sandbox Code Playgroud)

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

fij*_*ter 86

您可以尝试通过添加以下内容来升级Nginx中代理传递的超时:

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

如果要增加nginx服务的所有站点的超时限制,请在/ var/nginx/sites-available/[site-config]或/var/nginx/nginx.conf上.

您必须添加--timeout 300到gunicorn进程/配置.

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

  • proxy_connect_timeout <= 75s。http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_connect_timeout (5认同)
  • 只需要在gUnicorn命令行上调整`proxy_read_timeout 300s;`on nginx config和`-t 300`.在不增加`proxy_connect_timeout`参数的情况下工作,根据nginx doc不推荐使用(如上面的zm1注释中所示). (4认同)
  • 我会加一个这个好几次。这就是我对所有文件上传感到头疼的原因,并花了数小时仔细检查我的代码并多次破坏我的 settings.py。我要搬回 uwsgi。 (3认同)
  • 为了记录,我遇到了一些大文件/处理时间问题,并且调整gunicorn配置中的"超时"值正是我需要解决的问题.谢谢你提到! (2认同)

ddi*_*quo 36

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

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

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

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

gunicorn --timeout 120 --workers <NUMBER OF WORKER YOU WANT>
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是nginx上的`proxy_read_timeout`默认值为60s,所以如果你在gUnicorn中的进程需要更多的回复,那么它也需要增加.http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_read_timeout (4认同)

Ami*_*mor 16

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

经过一些测试,我们找到了解决方案,配置的参数是:timeout(而不是graceful 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
Run Code Online (Sandbox Code Playgroud)