我有以下设置...
- nginx 监听公共端口 80 并将请求代理到
localhost:10000
- 运行 django 站点 1 的 uwsgi 监听 localhost:10000 并生成一些网页。它还对网络服务进行一些调用
localhost:10001
- 运行 django 站点 2 的 uwsgi 侦听
localhost:10001
等等,它对 web 服务进行了一些调用otherhost:1234
忙时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
(和120
, 120000
,甚至,绝望地2
),但我找不到任何设置超时的地方 - 我认为它是something的默认值。
如果我跳过 nginx 并执行以下操作:
curl -m1800 -XGET 'http://localhost:10000/UI/Url'
我明白了
curl:(52)来自服务器的空回复
整整一分钟后。
有什么明显的我失踪了吗?有什么好的方法来追踪这个?