2013-04-22 17 views
30

Python Djangoアプリケーション用のNginx + uWSGIがあります。UWSGIが処理要求に時間がかかるNginxタイムアウト

私は私のnginx.confに次のようにあります

location/{ 
    include uwsgi_params; 
    uwsgi_pass 127.0.0.1:9001; 
    uwsgi_read_timeout 1800; 
    uwsgi_send_timeout 300; 
    client_header_timeout 300; 
    proxy_read_timeout 300; 
    index index.html index.htm; 
} 

が、完了するまでに約1分かかりますuWSGIで長時間実行される要求のため、私は以下のようにnginxのエラーログにタイムアウトエラーが表示されます。

2013/04/22 12:35:56 [エラー] 2709#0:アップストリームのクライアントからレスポンスヘッダーを読み取っているときに、アップストリームのタイムアウト(110:接続タイムアウト)が発生しました:xx.xx.xx.xx、server:リクエスト: "GET/entity/datasenders/HTTP/1.1"、アップストリーム: "uwsgi://127.0.0.1:9001"、ホスト: "xxx.xx.xx.x"

私はすでにヘッダーのタイムアウトを設定しており、uWSGIの送信/読み取りタイムアウトは5分です。これを克服するために何ができるか教えてください。

答えて

49

問題を解決した構成は以下のとおりです。

location/{ 
    include uwsgi_params; 
    uwsgi_pass 127.0.0.1:9001; 
    uwsgi_read_timeout 300; 
    index index.html index.htm; 
} 

残念ながら、私たちのマシンに複数のパスがnginx.confファイルを持っていたので、問題の上記の構成は、私たちのために動作しませんでした理由。我々は間違った道でconfと一緒に働いていました。

正しくnginxのは、実行から設定を拾っているどのパスを把握するには、次の

nginx -V # V is caps 

これはから設定を拾っているところから、正確に教えてくれます--conf-path=[]を持つことになります。

私は最近、上記のnginx -Vが正しい情報を提供していないことを発見しました。他の人が役に立つと思うように、私は上記を残しておきます。

+1

?秒ですか?私たちが2000年のように大量に設定すれば問題になるでしょうか? – senaps

0

「uwsgi_read_timeout」の回答に加えて、nginxのuwsgiキャッシュディレクトリの所有権が正しいことも確認する必要があります。所有権が実行されているnginxのプロセスと同じユーザーに設定する必要があります...私の場合、私はこの

grep '^user' /etc/nginx/nginx.conf 
ls -lah /var/cache/nginx/uwsgi_temp 
for f in $(find /var/cache/nginx/uwsgi_temp); do ls -lah $f; done 

をしなければならなかったのと同じユーザーが所有し、これらのファイルはありますか? そうでなければ、nginxをシャットダウンしてすべてのキャッシュファイルを削除し、適切な所有者が/ var/cache/nginx/uwsgi_tempにあることを確認して再起動してください。たぶんあなたはまた、再帰的なchownを行うことができます、私はこのアプローチをテストしませんでした。その数は何を表しています

# store the user 
THEUSER=$(grep '^user' /etc/nginx/nginx.conf | sed 's/.* //; s/;.*//') 

削除キャッシュと再起動のアプローチ

/etc/init.d/nginx stop 
rm -rf /var/cache/nginx/uwsgi_temp/* 
chown $THEUSER:$THEUSER /var/cache/nginx/uwsgi_temp 
/etc/init.d/nginx start 

再帰のchownアプローチ

chown -R $THEUSER:$THEGROUP /var/cache/nginx/uwsgi_temp/ 
# not sure if you have to restart nginx here... 
関連する問題