[英]How to track down a Python/Django/uwsgi/nginx timeout
我有以下設置...
localhost:10000
請求 localhost:10001
上對Web服務進行一些調用 localhost:10001
上偵聽,其中包括對其他otherhost:1234
上的Web服務進行一些調用 當otherhost
繁忙時,某些請求最多可能需要10分鍾才能完成。 不幸的是,恰好2分鍾后,nginx給出了502 Bad Gateway
。
據我所知,問題一定是...
我認為這不太可能,因為那將是504,但我正在使用:
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
我正在這樣啟動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 &
呼叫是這樣進行的:
response = urllib.request.urlopen(Url, urlencode(Data).encode("utf-8"),
timeout=1800).read().decode("utf-8")
這是由使用HTTPConnectionPool
的庫完成的。 我已將超時時間設置為10分鍾。 我認為這不太可能,因為將其設置為(例如)2s會導致Http 500超時...
我已經掃描我的代碼庫timeout
(和120
, 120000
,甚至,在絕望中2
),但我找不到任何地方的超時被設置-我想這是從一些默認。
如果我跳過nginx並執行以下操作:
curl -m1800 -XGET 'http://localhost:10000/UI/Url'
我懂了
curl:(52)來自服務器的空回復
一分鍾后。
有什么明顯的我想念的東西嗎? 有什么好的方法可以追蹤到這個?
您有一個漂亮的“奇怪”設置:
nginx-> uwsgi http路由器-> uwsgi
代替
nginx-> uwsgi
也許您有充分的理由,但是在這種情況下,您需要通過--http-timeout 1800設置uwsgi http路由器和uwsgi之間的超時
如果您不需要/不需要http路由器,則可以使用--http-socket選項讓uwsgi講http。
嘗試增加uwsgi_read_timeout 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.