如何追踪Python / Django / uwsgi / nginx超时

时间:2013-06-18 16:50:04

标签: python django nginx timeout uwsgi

我有以下设置......

  • nginx侦听公共端口80和代理请求localhost:10000
  • uwsgi运行django site 1侦听localhost:10000并生成一些网页。它还会在localhost:10001
  • 上调用某个Web服务
  • 运行django site 2的uwsgi在localhost:10001上进行侦听,其中包括otherhost:1234
  • 上的某个Web服务调用

otherhost忙时,一些请求预计最多需要10分钟才能完成。不幸的是,在2分钟之后,nginx会给出502 Bad Gateway

据我所知,问题必须是......

nginx超时:

我认为这不太可能,因为那将是504但我正在使用:

proxy_read_timeout 1800;
proxy_connect_timeout 1800;

uwsgi#1超时:

我正在推出像这样的uwsgi(在这两种情况下)

nohup uwsgi --http :8000 --chdir /opt/Path/To/Project --module Project.wsgi
            --virtualenv /opt/pyenv --enable-threads --logto /var/log/LogFile.log -p 1
            --threads 50 -t 1800 2> /dev/null &

Django站点1呼叫站点2:

这样的电话是这样的:

    response = urllib.request.urlopen(Url, urlencode(Data).encode("utf-8"), 
               timeout=1800).read().decode("utf-8")

站点2呼叫其他人:

这是由使用HTTPConnectionPool的库完成的。我配置了超时10分钟。我认为这不太可能,因为将它设置为(比方说)2s会导致超时时出现Http 500 ......

我已经扫描了我的代码库timeout(以及120120000,甚至在绝望2中),但我无法找到超时的任何地方被设置 - 我认为这是某事的默认设置。

如果我跳过nginx并执行:

curl -m1800 -XGET 'http://localhost:10000/UI/Url'

我得到了

  

curl:(52)来自服务器的空回复

一分钟后。

我有什么明显的遗失吗?跟踪这个的好方法是什么?

2 个答案:

答案 0 :(得分:2)

你有一个非常“奇怪”的设置:

nginx - > uwsgi http router - > uwsgi

而不是

nginx - > uwsgi

也许你有充分的理由,但在这种情况下你需要设置之间的超时 uwsgi http路由器和uwsgi通过--http-timeout 1800

如果http路由器不是你想要/需要你可以让uwsgi用http: - http-socket选项说话

答案 1 :(得分:0)

尝试增加uwsgi_read_timeout