1

私は次の設定をしています...

  • 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(そして120120000、さらには必死になって ) が、タイムアウトが設定されている場所が見つかりません -何か2のデフォルトだと思います。

nginx をスキップして実行すると:

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

私は得る

curl: (52) サーバーからの空の応答

ちょうど1分後。

私が行方不明であることは明らかですか?これを追跡する良い方法は何ですか?

4

2 に答える 2

2

あなたはかなり「奇妙な」設定をしています:

nginx -> uwsgi http ルーター -> uwsgi

それ以外の

nginx -> uwsgi

正当な理由があるかもしれませんが、そのような場合は --http-timeout 1800 を介して uwsgi http ルーターと uwsgi 間のタイムアウトを設定する必要があります。

http ルーターが必要でない場合は、--http-socket オプションを使用して uwsgi に http を話させることができます。

于 2013-06-19T04:07:29.003 に答える
0

uwsgi_read_timeoutを増やしてみてください。

于 2013-06-20T06:49:50.143 に答える