web-dev-qa-db-ja.com

504ゲートウェイのタイムアウトを回避することはできません

Nginx 504ゲートウェイのタイムアウトを回避するために、PHPコード:

set_time_limit(0);

また、/etc/php/7.0/fpm/php.iniで時間設定を上げようとしました。

max_execution_time = 3600
max_input_time = 3600

そして/etc/php/7.0/fpm/pool.d/www.confで:

request_terminate_timeout=3600

Nginxを再起動した後も、リクエストで3600秒前に504ゲートウェイがタイムアウトします。

それを確実に回避するために、これ以上何をすべきですか?

1
cawecoy

パフォーマンスの高いMPM-Eventワーカーを備えたNginxとApacheは、専用のデーモン(サービス)を使用してPHPを実行しています。このデーモンはすでに正しい方法で構成されています。しかし今、あなたはそのような長い時間待つようにウェブサーバーを設定しなければなりません。魔法の設定は、設定fastcgi_read_timeoutで行うことができます。

しばらく待つようにNginxを構成します...

location ~ \.php$ {

  # allow logging
  access_log              /var/log/nginx/access.log vhosts;

  # include defaults
  include                 fastcgi_params;

  # define connection to php-fpm
  fastcgi_keep_conn       on;
  fastcgi_pass            unix:/var/run/php5-fpm.sock;
  fastcgi_index           index.php;

  # php script name
  fastcgi_param           SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  fastcgi_param           SCRIPT_NAME      $fastcgi_script_name;

  # set buffers
  fastcgi_buffer_size             128k;
  fastcgi_buffers                 256 16k;
  fastcgi_busy_buffers_size       256k;
  fastcgi_temp_file_write_size    256k;

  # allow web-server to wait for a long time before giving up
  fastcgi_read_timeout            3600s;

}

パブリックアクセス可能なWebサーバーに対してこの設定をアクティブにすることはお勧めできません。

時間が必要なタスクがある場合は、代わりにCLI(コマンドラインインターフェイス)を介してこのタスクを実行する必要があります。良い例は、巨大なWebサイトのGooglesitemap.xmlの生成です。

例:

コマンドラインからスクリプトを実行します...

cd /var/www/mysite/ ; php generateSitemap.php

コマンドラインからスクリプトを毎日実行するcronジョブを定義します...

0 4 * * *    cd /var/www/mysite/ ; php generateSitemap.php
3
Jens Bradler