web-dev-qa-db-ja.com

Gunicorn Nginxタイムアウトの問題

Gunicorn + nginxでDjangoを実行しています。ファイルのアップロードに問題があります。実際にアップロードは正常に機能していますが、gunicornがタイムアウトするため、nginxでこれが発生します。

2011/07/25 12:13:47 [error] 15169#0: *2317 upstream timed out (110: Connection timed out) while reading response header from upstream, client: IP-ADDRESS, server: SERVER, request: "GET /photos/events/event/25 HTTP/1.1", upstream: "http://127.0.0.1:29000/photos/events/event/25", Host: "Host", referrer: "REFERER_ADDRESS"

ページを更新すると、すべての写真が正常にアップロードされていることがわかります。問題は、タイムアウトが発生し、アップロードが機能しなかったという印象を与えることです。

ここに私のgunicorn confがあります:

bind = "127.0.0.1:29000"
logfile = "/path/to/logs/gunicorn.log"
workers = 3

タイムアウトを変更しようとしましたが、機能しませんでした。

58
user250145

Nginxでプロキシパスのタイムアウトをアップグレードしてみてください:

proxy_connect_timeout 75s;
proxy_read_timeout 300s;

nginxがサービスを提供するすべてのサイトのタイムアウト制限を増やしたい場合は、/ var/nginx/sites-available/[site-config]または/var/nginx/nginx.confで。

--timeout 300もgunicornプロセス/構成に追加する必要があります。

これにより、過去に大きなアップロードで問題が解決しました。

86
fijter

これはnginxタイムアウトではありませんが、おそらくGunicornタイムアウトです。 Gunicornのデフォルトは30秒のタイムアウトです。

一般に、返すのに30秒以上かかるエンドポイントがないようにすることでこれを修正する必要がありますが、エンドポイントがあまり使用されない場合は、gunicornタイムアウトを増やすこともできます。

これを行う場合は、おそらくgunicornワーカープロセスの数も増やす必要があります。

Gunicornのタイムアウトとワーカーを増やすには、起動時に次のコマンドラインオプションを追加できます。

gunicorn --timeout 120 --workers <NUMBER OF WORKER YOU WANT>
35
ddipasquo

Django + nginx + gunicornを使用しても同じ問題が発生しました。 Gunicornのドキュメントから、ほとんど違いのないグレースフルタイムアウトを構成しました。

いくつかのテストを行った結果、解決策が見つかりました。設定するパラメーターは次のとおりです。時計のように機能します。

だから、やる:

1)gunicorn構成ファイルを開きます

2)タイムアウトを必要なものに設定します-値は秒単位です

NUM_WORKERS=3
TIMEOUT=120

exec gunicorn ${Django_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--timeout $TIMEOUT \
--log-level=debug \
--bind=127.0.0.1:9000 \
--pid=$PIDFILE
15
Amit Talmor

これは、同様の問題を持つ人を助けるかもしれません。

Djangoアプリケーションでnginxとgunicornからタイムアウトエラーが発生しました。nginxからタイムアウトエラーが発生していたため、Djangoから実際のエラーを確認できませんでした。 fijterが提案しました。エラーはsettings.pyファイルにあることがわかりました。

DEBUGをFalseに設定し、ALLOWED_HOSTSにドメイン名を追加しなかった場合、このエラーが発生する可能性があります。

Settings.pyのALLOWED_HOSTSにドメインを追加したところ、エラーはなくなりました。

非常に簡単な解決策!

0
RLott