私は次の設定をしています...
- nginx はパブリック ポート 80 でリッスンし、リクエストをプロキシします
localhost:10000
- django サイト 1 を実行している uwsgi は、localhost:10000 でリッスンし、いくつかの Web ページを生成します。また、Web サービスへの呼び出しも行います。
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")
othersite を呼び出すサイト 2:
これは、を使用するライブラリによって行われていますHTTPConnectionPool
。タイムアウトを 10 分に設定しました。(たとえば)2sに設定すると、タイムアウト時にHttp 500が発生するため、これはありそうにないと思います...
私は自分のコードベースをスキャンしましたtimeout
(そして120
、120000
、さらには必死になって ) が、タイムアウトが設定されている場所が見つかりません -何か2
のデフォルトだと思います。
nginx をスキップして実行すると:
curl -m1800 -XGET 'http://localhost:10000/UI/Url'
私は得る
curl: (52) サーバーからの空の応答
ちょうど1分後。
私が行方不明であることは明らかですか?これを追跡する良い方法は何ですか?