web-dev-qa-db-ja.com

NGINXタイムアウトを変更できません

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;

https://asdqwe.n​​et/blog/solutions-504-gateway-timeout-nginx/ の提案に従って、timeout.confファイルを/etc/nginx/conf.d/に追加してみました。

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


編集:

構成ファイル内のworker_processesの数の変更をテストして、構成ファイル内の他の変更が反映されていることを確認し、その数を十分に変更するとワーカーの数が変更されるため、ファイルが正しいファイルになり、 Nginxにピックアップされます。タイムアウト(または多分完全なhttpセクション?)の変更ではありません。タイムアウトを30秒に設定することもテストしましたが、それでも1分でタイムアウトします。さらに、これらの設定をsites-enabled/my_siteに入れてみましたが、同じ結果が得られます。

Edit2:

私の知る限り、Nginxのドキュメントに従って値を正しく設定しています。 wsgi_connect_timeout

ngx_http_proxy_module

5
Jeff

解決しました!!

私が設定した間、問題はuwsgiに関連していることが判明しました

uwsgi_connect_timeout 75s;

私が実際に設定する必要があったのは

uwsgi_read_timeout 600s;
2
Jeff