
Nginx サーバーで 504 タイムアウトが発生しています:
504 Gateway Time-out
。この Web サイトでは、ユーザーがカスタム データ ファイルをダウンロードできます。サイトはほとんどの状況で正常に動作し、ユーザーは問題なくいくつかのファイルをダウンロードできます。問題は、データ ファイルが要求されたときにのみ生成されることです。そのため、複雑なデータが要求されると、Python バックエンドがファイルを生成してダウンロードを開始するのに 1 分以上かかります。1 分以内に応答がないため、Nginx は を返します504 Gateway Time-out
。ファイル自体は CSV ファイルでそれほど大きくないため、バックエンドがファイルを生成した後はダウンロードは高速ですが、Nginx の待機時間を長くする方法が必要です。
Nginx のタイムアウトを 1 分から約 10 分に増やす方法を探しています。
これまで試したこと:
ファイルを変更して、中括弧nginx.conf
の間に次の行を含めます。http {}
uwsgi_connect_timeout 75s;
proxy_connect_timeout 600;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
私はまた、提案されたようtimeout.conf
にファイルを追加しようとしました/etc/nginx/conf.d/
https://asdqwe.net/blog/solutions-504-gateway-timeout-nginx/:
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
各変更を行った後、サーバーを再起動しましたが、1 分後にタイムアウトがまだ発生します。curl -o
サービス プロバイダーの問題を回避するために、サーバー上で を実行してさらにテストしました。出力は次のようになりました。
$curl -o out-put-file.csv "./localhost/my/url"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 183 100 183 0 0 3 0 0:01:01 0:01:00 0:00:01 48
そしてこのエラーはerror.logに書き込まれます
2018/03/26 09:55:15 [error] 10105#10105: *1 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 142.1.2.3, server: localhost, request: "GET /my/url", upstream: "uwsgi://unix:/tmp/my-applacation.sock", host: "142.1.2.3"
Nginx を使用せずにアプリケーションを実行して同じcurl -o
リクエストを実行すると、リクエストにはかなり時間がかかります (要求されたデータに応じて最大 8 分) が、エラーやタイムアウトなしで正常に終了します。
実行すると、$ /usr/sbin/nginx -V 2>&1 | grep conf
設定ファイルが次の場所にあることがわかります。--conf-path=/etc/nginx/nginx.conf
Nginx バージョン: nginx/1.12.2 および nginx/1.4.6 (Ubuntu)
OSバージョン: Ubuntu 16.04.1およびUbuntu 14.04.5 LTS
編集:
構成ファイル内の他の項目の変更が反映されるかどうかを確認するために、構成ファイル内のワーカー プロセスの数を変更してテストしました。確かに、その数を変更するとワーカーの数が変更され、ファイルは正しいファイルになり、変更が Nginx によって反映されます。タイムアウト (または完全な http セクション?) は変更されません。タイムアウトを 30 秒に設定してテストしましたが、それでも 1 分でタイムアウトします。さらに、これらの設定を入れてみましたsites-enabled/my_site
が、結果は同じです。
編集2:
私の知る限り、Nginx のドキュメントに従って値を正しく設定しています。 uwsgi_connect_timeout
答え1
解けました!!
問題はuwsgiに関連していることが判明しましたが、
uwsgi_connect_timeout 75s;
私が実際に設定する必要があったのは
uwsgi_read_timeout 600s;