NGINXを使用しています 多くの。最近、 Node.jsをデプロイしました NGINXを使用したWebアプリケーション そのためのリバースプロキシサーバーとして。アプリケーションの重要な機能の1つは、Excelテンプレートを使用したデータインポートのサポートです。ただし、かさばるファイルをアップロードするユーザーが504ゲートウェイタイムアウトを取得し始めるまで、それほど時間はかかりませんでした。 NGINXからのエラー 。
[次のこともお勧めします:Nginxエラーの修正:413リクエストエンティティが大きすぎます]
同じエラーが発生しますか?心配しないでください、私はあなたをカバーしてもらいました。この記事では、504ゲートウェイタイムアウトを修正する方法を紹介します。 NGINXでリクエストのタイムアウトを増やすことでエラーが発生しました Webサーバー。
プロキシサーバーのNGINXでリクエストタイムアウトを増やす
NGINXを使用している場合 Node.jsなどのアプリケーションサーバーのリバースプロキシとして またはApacheなどのWebサーバー またはGunicorn 、次に、 http のいずれかで次のパラメータを設定することにより、リクエストのタイムアウトを増やすことができます 、またはサーバー 、または場所 ディレクティブ。
タイムアウトは秒単位であり、環境で効果的かつ効率的に機能するタイムアウト値を設定する必要があります。
proxy_connect_timeout 75; proxy_send_timeout 600; proxy_read_timeout 600;
ディレクティブの名前から、それらが定義するタイムアウトを簡単に見分けることができます。 proxy_connect_timeout
ディレクティブは、プロキシサーバーとの接続を作成するためのタイムアウトを示します。 NGINXの公式ドキュメントによると、値は 75を超えてはなりません 秒。
次のディレクティブproxy_send_timeout
プロキシサーバーにリクエストを送信するためのタイムアウトを定義します。最後のディレクティブproxy_read_timeout
プロキシされたサーバーからの応答を読み取るためのタイムアウトを設定します。
上記のディレクティブを少し理解したので、次に示すように構成できます。 httpで コンテキストでは、 /etc/nginx/nginx.confにあるNGINXのメイン構成ファイルで設定できます。 。
http{ .... proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; .... In the server context, you can define them in a server block file for your application for example /etc/nginx/conf.d/example.com.conf: server{ .... proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; location / { try_files $uri $uri/ /index.html =404 =403 =500; } location /api { proxy_pass http://127.0.0.1:5000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
ロケーションブロックでは、次のようになります。
server{ .... location / { try_files $uri $uri/ /index.html =404 =403 =500; } location /api { proxy_pass http://127.0.0.1:5000; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
ファイルを保存して閉じます。
最近の変更を適用するには、 NGINXを再起動する必要があります サービス。
$ sudo systemctl restart nginx OR # systemctl restart nginx
FastCGIのNGINXでリクエストタイムアウトを増やす
FastCGIの場合 PHP-FPMなどのサーバー 、 httpのいずれかで次のディレクティブを使用できます 、またはサーバー 、または場所 :
fastcgi_connect_timeout 75; fastcgi_send_timeout 600; fastcgi_read_timeout 600;
場所 PHPファイルを処理するためのブロック。次のように定義できます。
location ~ .php$ { fastcgi_pass unix:/run/lib/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_connect_timeout 75; fastcgi_send_timeout 600; fastcgi_read_timeout 600; }
NGINXを再起動することを忘れないでください 変更後のサービス:
$ sudo systemctl restart nginx OR # systemctl restart nginx
注 : php.iniで構成を変更する必要がある場合もあります およびPHP-FPM 特にmax_execution_time
に構成ファイルをプールします およびrequest_terminate_timeout
それぞれディレクティブ。
それでおしまい!この記事では、 NGINXでリクエストのタイムアウトを増やす方法について説明しました 504ゲートウェイタイムアウトを解決するには エラー。詳細については、NGINXのドキュメントをお読みください。コメントについては、以下のフィードバックフォームからお問い合わせください。