web-dev-qa-db-ja.com

504ゲートウェイタイムアウトuwsgi + nginx Djangoアプリケーション

DjangoアプリケーションをNginx + uwsgiを使用して実行しようとしていますが、504 Gateway Time-out 1分のロード後。

私のアプリは、いくつかのWebサイトで特定のものを検索するため、必要な処理を実行するのに時間がかかります。

私のnginx confは次のものです:

upstream uwsgi {
    server 127.0.0.1:8000;
}

server {

    listen 80;
    server_name server_ip;

    root /opt/emails/subscriptions;
    index index.html index.htm index.php;

    location /emailsproject/ {
        root /opt/emails/subscriptions/;
    }

    location / {
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://uwsgi;
        proxy_set_header Host $http_Host;
        uwsgi_read_timeout 18000;
    }
}

私のuwsgiスクリプト:

description "uWSGI server"

env PYTHONPATH=/opt/emails/subscriptions
env Django_SETTINGS_MODULE=emailsproject.settings

start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec uwsgi_python --http-socket  127.0.0.1:8000 -p 4 --wsgi-file /opt/emails/subscriptions/emailsproject/wsgi.py

私のnginxは私にerror.logのフォローインエラーメッセージを与えています:

2015/09/28 02:15:57 [error] 4450#0: *19 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 37.235.53.246, server: my_server_ip, request: "POST /home/ HTTP/1.1", upstream: "http://127.0.0.1:8000/home/", Host: "my_server_ip", referrer: "http://my_server_ip/home/"

どうすればこれを取り除くことができるかについて誰かが何か考えを持っていますか?私は大量のスタックオーバーフローソリューションを試しましたが、どれもうまくいきませんでした。

2
Cajuu'

私はパーティーに遅れていることはわかっていますが、これらの提案(およびその他)の多くを試した後、最終的にDNSからタイムアウトが発生していることに気付きました。Amazonロードバランサーを使用している場合、「アイドルタイムアウト」が設定されていますデフォルトは120秒。

2
Phil

多くの人々は、504がクライアントからのリクエストに関連している、または巨大なセッションが山積しているサイトでDDoS攻撃が発生していると想定しています。 wsgiがコードを提示できない場合や、オーバーフローのためにサーバーが応答できない場合は、エラーが表示される可能性があるため、504は両方の方法で機能します。したがって、manage.pyを実行して、コードが提示可能かどうかを確認してください。次に、"curl -I yoursite.com"コマンドを試して、エラーが発生するかどうかを確認します。焦点を合わせる必要がある2つのnginx関連ファイルがあり、1つはデフォルトのグローバル設定の/etc/nginx/nginx.confにあります。 2つ目は、/etc/nginx/sites-availableで自分を作成することです。グローバル/etc/nginx/nginx.confインストールで、次の行を追加します

proxy_connect_timeout   10;
proxy_send_timeout      15;
proxy_read_timeout      20;

このソリューションは、さまざまなシナリオで発生する504エラーの90%に対処します。プロジェクトのconfは、上記で述べたものと同じでなければなりません。

2
Mudassar

これは、proxy_read_timeoutではなくuwsgi_read_timeoutを設定する必要があるためです。そしてそれは、実際にはuwsgiを使用しておらず、HTTPプロキシを使用しているためです。 Uwsgiバックエンドはuwsgi_passディレクティブを使用して宣言されます。

1
drookie