212

Django、FastCGI、および Nginx を実行しています。私は、誰かが XML 経由でデータを送信し、それを処理して、送信された各ノードのステータス コードを返すことができるような API を作成しています。

問題は、XML の処理に時間がかかりすぎると、Nginx が 504 ゲートウェイ タイムアウトをスローすることです。60 秒より長いと思います。

そのため、場所 /api に一致するリクエストが 120 秒間タイムアウトしないように Nginx を設定したいと思います。それを実現する設定。

私がこれまでに持っているものは次のとおりです。

    # Handles all api calls
    location ^~ /api/ {
        proxy_read_timeout 120;
        proxy_connect_timeout 120;
        fastcgi_pass 127.0.0.1:8080;
    }

編集:私が持っているものは機能していません:)

4

5 に答える 5

252

プロキシのタイムアウトは、FastCGI ではなく、プロキシの場合に適しています...

FastCGI タイムアウトに影響を与えるディレクティブはclient_header_timeout、 、client_body_timeoutおよびsend_timeoutです。

編集:nginx wikiで見つかったものを考慮して、send_timeoutディレクティブは、応答の一般的なタイムアウトを設定する責任があります(これは少し誤解を招くものでした)。FastCGI の場合、 FastCGI プロセスの応答タイムアウトfastcgi_read_timeoutに影響を与えるものがあります。

于 2009-02-18T19:34:13.790 に答える
24

ユニコーンとレールでnginxを使用している場合、おそらくタイムアウトはunicorn.rbファイルにあります

unicorn.rb に大きなタイムアウトを設定する

timeout 500

それでも問題が解決しない場合は、nginx のアップストリームで fail_timeout=0 を設定してみて、これで問題が解決するかどうかを確認してください。これはデバッグ用であり、本番環境では危険な場合があります。

upstream foo_server {
        server 127.0.0.1:3000 fail_timeout=0;
}
于 2012-12-11T15:48:33.057 に答える
1

そのようなサーバープロキシセットで

location / {

                proxy_pass http://ip:80;                

                proxy_connect_timeout   90;
                proxy_send_timeout      90;
                proxy_read_timeout      90;

            }

そのように設定されたサーバーphpで

server {
        client_body_timeout 120;
        location = /index.php {

                #include fastcgi.conf; //example
                #fastcgi_pass unix:/run/php/php7.3-fpm.sock;//example veriosn

                fastcgi_read_timeout 120s;
       }
}
于 2020-03-17T14:25:02.280 に答える
1

ユニコーンを使用する場合。

topサーバーで見てください。Unicorn は現在、CPU を 100% 使用している可能性があります。この問題にはいくつかの理由があります。

  • HTTP リクエストを確認する必要があります。一部のリクエストは非常に難しい場合があります。

  • ユニコーンのバージョンを確認してください。最近更新したため、何かが壊れている可能性があります。

于 2015-12-09T00:55:39.490 に答える