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

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

Nginx + uwsgi を使用して Django アプリケーションを実行しようとしていますが、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/"

これをどうやって取り除くことができるか、誰か知っていますか? たくさんの stackoverflows の解決策を試しましたが、どれもうまくいきませんでした。

答え1

遅れて参加したことは承知していますが、これらの提案 (および他の提案) を多数試した後、最終的にタイムアウトは DNS で発生していることがわかりました。Amazon ロード バランサーを使用している場合は、「アイドル タイムアウト」がデフォルトで 120 秒に設定されています。

答え2

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

答え3

多くの人は、504 はクライアントからのリクエストに関係している、またはサイト上でセッションが大量に溜まっている DDoS 攻撃があると考えているようです。504 は両方向に作用し、wsgi がコードを表示できない場合やサーバーがオーバーフローのために応答できない場合にエラーが表示されることがあります。そのため、manage.py を実行してコードが表示可能かどうかを再確認してください。次に、"curl -I yoursite.com"コマンドを試して、まだエラーが発生しているかどうかを確認します。注目すべき nginx 関連のファイルは 2 つあり、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% に対処します。プロジェクトの設定は、上記で説明したものと同じである必要があります。

関連情報