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;
}
編集:私が持っているものは動作していません:)
プロキシタイムアウトは、FastCGIではなく、プロキシ用です。
FastCGIタイムアウトに影響するディレクティブは、client_header_timeout
、client_body_timeout
、およびsend_timeout
です。
Edit:nginx wikiの内容を考慮して、 send_timeoutディレクティブ は応答の一般的なタイムアウトの設定を担当します(少し誤解を招く恐れがありました) )。 FastCGIには、 fastcgiプロセス応答タイムアウト に影響を与えるfastcgi_read_timeout
があります。
HTH。
UnicornとRailsでnginxを使用している場合、ほとんどの場合、タイムアウトはUnicorn.rb
ファイルにあります
unicorn.rbに大きなタイムアウトを設定します
timeout 500
それでも問題が解決しない場合は、nginxのアップストリームでfail_timeout = 0を試し、問題が解決するかどうかを確認してください。これはデバッグ用であり、実稼働環境では危険な場合があります。
upstream foo_server {
server 127.0.0.1:3000 fail_timeout=0;
}
http
nginxセクション(/etc/nginx/nginx.conf)で追加または変更:
keepalive_timeout 300s
server
nginxセクション(/etc/nginx/sites-available/your-config-file.com)に次の行を追加します:
client_max_body_size 50M;
fastcgi_buffers 8 1600k;
fastcgi_buffer_size 3200k;
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
ケース127.0.0.1:9000のphp
ファイル(/etc/php/7.X/fpm/pool.d/www.conf)modify:
request_terminate_timeout = 300
お役に立てば幸いです。
Unicornを使用する場合。
サーバー上のtop
を見てください。 Unicornは現在、CPUを100%使用している可能性があります。この問題にはいくつかの理由があります。
HTTPリクエストを確認する必要がありますが、その中には非常に難しいものもあります。
Unicornのバージョンを確認してください。あなたは最近それを更新したかもしれません、そして何かが壊れました。