web-dev-qa-db-ja.com

nginxのタイムアウトを無効にする方法は?

ローカル開発マシンでは、 私はnginxリバースプロキシを持っています のように:

server {
  listen 80;
  server_name myvirtualhost1.local;
  location / {
    proxy_pass http://127.0.0.1:8080;
}

server {
  listen 80;
  server_name myvirtualhost2.local;
  location / {
    proxy_pass http://127.0.0.1:9090;
}

しかし、アプリケーションをデバッグすると、応答が無限に遅れる可能性がありますが、30秒後には次のようになります。

504 Gateway Time-out

応答として。

タイムアウトを無効にして、リバースプロキシに応答を永久に待機させるにはどうすればよいですか?また、設定をグローバルにしたいので、プロキシごとに設定する必要がありません。

57
k0pernikus

これを無効にすることはまったくできないかもしれませんが、実行可能な回避策は実行時間を増やすことです。 nginxチュートリアルサイト には次のように書かれています。

サーバー上のすべてのサイトの時間制限を増やしたい場合は、メインのnginx.confファイルを編集できます。

vim /etc/nginx/nginx.conf

以下をhttp {..}セクションに追加します

http {
     fastcgi_read_timeout 300;
     proxy_read_timeout 300;
}

そしてnginxの設定をリロードしてください:

Sudo service nginx reload

起こりそうにないかなり大きな値、つまり999999または time units を使用して、1dを介して1日にしました。

値を0に設定すると、ゲートウェイタイムアウトエラーがすぐに発生することに注意してください。

74
k0pernikus

AWSとロードバランサーを使用している場合は、アイドルタイムアウトを編集する必要があります。デフォルトは60秒だと思います

14
szeljic

Nginx 502タイムアウトエラーと戦っており、問題を解決できませんでした。しかし、それはたまたまタイムアウトエラーの原因となったgunicornでした。そのため、fastcgi設定を確認する必要がある場合もあります。

Gunicornの場合:

gunicorn wsgi:application --timeout 300
6
Kostyantyn

Nginxのタイムアウトを増やしたり、@ k0pernikusの回答に追加したりすることができます。以下をロケーションブロックに追加できます。

        location /xyz {
         proxy_read_timeout 1800;
         proxy_connect_timeout 1800;
         proxy_send_timeout 1800;
         send_timeout 1800;
        }

ここでは1800秒です。

構成を変更した後、次のコマンドで構文を確認します。

nginx -t -c /some/path/nginx.conf

次にnginxをリロードします:

nginx -s reload
4